日期代码仅适用于 chrome



问题是这个程序只能在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());

最新更新