下面是一些代码来显示它可能会怎么做,希望有足够的意见。
据我所知,英国的一些地区观察夏令时,但以下内容不应受时区变化的影响,因为它使用本地日期方法。
任何日期都可以用于循环的开始,我已经完全随机选择了2011年6月10日。此外,可以使用任何时间将最后一天的消息从“今天放入垃圾箱”更改为标准“下一周期为x天”。
该算法计算从开始日期到下一整整两周的毫秒数,方法是从每两周毫秒的最后一整整两周减去毫秒数。然后剩下的部分转换为全天。
为了节省周期结束前一天(本例中是周四)的不明确性,该消息表示周期结束于“明天”,而不是在1天内,并且在当天本身,直到18:00或6下午说它的周期今天结束。之后,它说周期在14天或更短时间内结束。
// Date objects are based on milliseconds (8.64e7 per day)
// Calculate milliseconds for a fortnight
var msPerFortnight = 8.64e7 * 14;
// Any date can be the start of the fortnightly cycle
// Make Friday 10 June 2011 first day of cycle,
// Cycles end on 25 March, 6 April 2016.
// Note months are zero based so June is 5
var firstDayOfCycle = new Date(2011, 5, 10);
// Time of day to stop showing "put bins out today" message on start/end day
// 18 is 6 pm
var endHour = 18;
// Get the day name for the cycle start/end
var dayName = ['Sunday','Monday','Tuesday','Wednesday','Thursday',
'Friday','Saturday'][firstDayOfCycle.getDay()];
// Convert end hour to convenient format with am/pm
var endHourNeat = (endHour % 12 || 12) + ' ' + (endHour < 12? 'am' : 'pm');
// Get a date for now
var now = new Date();
// Get milliseconds to next full fortnight by
// msPerFortnight minus milliseconds since last full fortnight
var m = msPerFortnight - ((new Date() - firstDayOfCycle) % msPerFortnight);
// Calculate time remaining full days
var daysLeft = Math.ceil(m/8.64e7);
// Create a human friendly message
var message;
// If more then one day left, or after 18:00 on last day, show this message
if (daysLeft == 14 && now.getHours() < endHour) {
message = 'Today is ' + dayName + ', so please put your bins out before ' + endHourNeat + '!';
} else if (daysLeft > 1) {
message = 'Put your bins out on ' + dayName + ' in ' + daysLeft +
' day' + (daysLeft == 1?'':'s') + ' time.';
} else if (daysLeft == 1) {
message = 'Put your bins out tomorrow, on ' + dayName + '.';
}
document.write(message);
你甚至可以添加周期结束的日期,并添加序,所以它可能会读“把你的垃圾桶了上周五25日,3天时间。”但我会留给你的。
请参阅http://stackoverflow.com/help/how-to-ask并显示您的搜索结果发现/测试 – profesor79
您可能会先用'new Date()'创建一个Date对象。您可以使用* getDay *方法确定一天(5周五)。您还需要一些时期,周五是每两周周期的开始。 – RobG