【问题标题】:Date Code will only work in chrome日期代码仅适用于 chrome
【发布时间】:2017-01-07 02:05:10
【问题描述】:

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

【问题讨论】:

  • 24:00:00 看起来不是有效时间。
  • @cartant — 它与 00:00:00 一样有效(请参阅 ECMA-262 §20.3.1.16Date Time String Format: "HH ... 从 00 到 24 的两个十进制数字")。但是,强烈建议不要使用 Date 构造函数解析字符串,因为即使它们试图符合 ECMA-262 的实现也会存在不一致。
  • @RobG 谢谢。

标签: javascript jquery date time


【解决方案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)

【讨论】:

  • 但最好使用new Date(year, 11, 25) 以避免混淆。 ;-)
【解决方案2】:

您对当年圣诞节的计算似乎过于复杂且容易出错。您当然不应该使用 Date 构造函数来解析字符串(或 Date.parse,它们等效于解析)。

考虑以下情况,它会创建一个日期为当年圣诞节早上 00:00:00。

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

console.log(christmas.toString());

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2023-03-30
    相关资源
    最近更新 更多