日期代码仅适用于chrome

时间:2017-01-07 02:05:11

标签: javascript jquery date time

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

链接为http://jsbin.com/suyedol/5/edit

2 个答案:

答案 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的日期。

&#13;
&#13;
var christmas = new Date();
christmas.setHours(0,0,0,0);
christmas.setMonth(11,25);

console.log(christmas.toString());
&#13;
&#13;
&#13;