问题是这个程序只能在Chrome中工作,无论我使用什么日期格式或当我使用解析日期时,它都会返回NaN。
该程序将两个日期(常量和某个假日)转换为从 1970 年 1 月 1 日起的毫秒。比较和减去日期。然后将它们划分并四舍五入为秒,直到日期。我认为,问题在于确定日期的时间。我不想弄乱时区。
jQuery在答案中很好。正则表达式很好,但我不明白它们。
如果答案可以有一个有效的证明,那就太酷了。谢谢!
html是(所有重要的)
<p id="output">
</p>
代码是
$(document).ready(function() {
var date = new Date();
var year = date.getFullYear();
console.log(year + "-12-25");
var christmasdate = new Date(year + "-12-24 24:00:00");
$("#output").css("font-size","20px");
$("#output").html("If this lasts more than a second, something is wrong.");
setInterval(function() {
date = new Date();
var curr_time = date.getTime();
var xmas_time = christmasdate.getTime();
var time_left = Math.round((xmas_time - curr_time) / 1000);
var output;
if (time_left < 0) {
output = "Christmas was " + Math.abs(time_left) + " seconds ago."
}
else {
output = "There is " + time_left + " seconds until christmas eve.";
}
if (time_left == 1) {
output = "There is " + time_left + "second until christmas eve.";
}
$("#output").html(output);
var bodyheight = $(document).height();
var allheight = $("body").height();
$("h2").css("margin-top",(bodyheight / 2) - (allheight / 2))
}, 1000);
});
链接 http://jsbin.com/suyedol/5/edit。
来自 MDN:
由于日期字符串解析的差异,建议始终手动解析字符串,因为结果不一致,尤其是在不同的 ECMAScript 实现中,其中像"2015-10-12 12:00:00"这样的字符串可能会解析为 NaN、UTC 或本地时区。
但不是
var christmasdate = new Date(year + "-12-24 24:00:00");
您可以改用:
var christmasdate = new Date(year,11,24,24,0,0);
哪个 Safari 计算为
Mon Dec 25 2017 00:00:00 GMT-0500 (EST)
你对当年圣诞节的计算似乎过于复杂和容易出错。您当然不应该使用 Date 构造函数来解析字符串(或 Date.parse,它们等效于解析)。
请考虑以下内容,它将创建当年圣诞节早晨 00:00:00 的日期。
var christmas = new Date();
christmas.setHours(0,0,0,0);
christmas.setMonth(11,25);
console.log(christmas.toString());