这是我第一次在这里发帖提问,但我是StackOverflow的长期用户。
我是Javascript的新手,目前正在尝试解决我在为大学课程创建的网站上遇到的一些问题。
我正在尝试在网站的仪表板上创建一个小信息框,它只是告诉您下一个垃圾箱收集日的时间。目前这是星期五的每两周一次,下一次是4月1日。我想知道是否有一种简单的方法让我显示下一个bin收集日期,直到bin收集的那一天,文本将更改为“今天收集bin”!大约下午6点之后,它将在两周后改为下一个收集日期。
对不起,如果这个措辞非常糟糕!该网站仅在英国使用,因此我不需要担心时区。
非常感谢任何帮助!
非常感谢, 艾米丽
答案 0 :(得分:0)
一种可能的解决方案是使用Unix纪元,因为它们可以在1970年1月1日之后的几秒钟内为您提供时间。通过使用这个,我们可以找到我们进入两周的距离。我发现Math.floor(Date.parse("2016-04-01")/86400000)%14
等于8。
然后您的代码可能是:
var days_into_fortnight=Math.floor(Date.now()/86400000)%14;
var string_to_show;
var days_to_collection;
if (days_into_fortnight==8){
string_to_show="Bin collection!";
}
else{
if(days_into_fortnight<8){
days_to_collection=8-days_into_fortnight;
}
else{
days_to_collection=22-days_into_fortnight;
}
string_to_show=days_to_collection.toString()+" day(s) to collection!";
}
编辑:拼写
答案 1 :(得分:0)
下面是一些代码,展示如何完成,希望有足够的评论。
据我所知,英国的某些地区遵守夏令时,但由于采用当地日期方法,因此不应受到时区变化的影响。
任何日期都可以用于周期的开始,我已经完全随机选择了2011年6月10日。此外,一天中的任何时间都可以用来更改最后一天的消息,从#34;今天放出你的箱子&#34;标准&#34;下一个周期是x天&#34;。
该算法通过从每两周的毫秒减去上一个完整两周的毫秒数来计算从开始日期到下一个完整两周的毫秒数。然后将剩余部分转换为完整日期。
为了避免在周期结束前一天(在这种情况下,周四)消除歧义,消息说周期结束&#34;明天&#34;而不是在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);
&#13;
您甚至可以添加循环结束的日期并添加序数,因此它可能会读取&#34;将您的箱子放在25日星期五,3天时间内#34;。但是我会把它留给你。