问题是这个程序只能在Chrome中运行,无论我使用什么日期格式,或者使用时解析日期,它都会返回NaN。
该程序将两个日期(常数和某个假日)从1970年1月1日起转换为毫秒。比较和减去日期。然后将它们分成几秒钟,直到日期为止。问题,我相信是在设定日期时。我 NOT 想要搞乱时区。
答案中的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);
});
答案 0 :(得分:1)
来自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)
答案 1 :(得分:1)
您今年的圣诞节计算似乎过于复杂且容易出错。你当然不应该使用Date构造函数来解析字符串(或Date.parse,它们等同于解析)。
请考虑以下内容,即在当年的圣诞节早晨创建00:00:00的日期。
var christmas = new Date();
christmas.setHours(0,0,0,0);
christmas.setMonth(11,25);
console.log(christmas.toString());
&#13;