【问题标题】:Cannot get days of the month that end in 31 in Javascript无法在 Javascript 中获取以 31 结尾的月份中的日期
【发布时间】:2017-09-04 13:53:21
【问题描述】:

我正在将一个复活节彩蛋放入我的程序中,这会导致万圣节出现南瓜灯图像,但我无法让代码将 10 月 31 日识别为月/日。当我对我的代码执行 console.log 时,它会反馈“2017 年 10 月 30 日星期一”而不是 31 日。

var today = new Date();
var halloween = new Date(today.getFullYear() + '10-31');
console.log(halloween.toDateString());
console.log(today.toDateString());

if (today.toDateString() === halloween.toDateString()) {
    printedMsg.innerHTML = rewardMsg + 'You deserve a spooky treat! ' + 
    '<img src="https://preview.c9users.io/mkrul/color_project/reward-imgs/boo.jpg">';
}

编辑:我将缺失的连字符放在“-10-31”前面,但控制台仍显示“2017 年 10 月 30 日星期一”

var halloween = new Date(today.getFullYear() + '-10-31');

【问题讨论】:

标签: javascript date


【解决方案1】:

您缺少连字符:

var today = new Date();
var halloween = new Date(today.getFullYear() + '-10-31');
console.log(halloween.toDateString());

会回来

Tue Oct 31 2017

【讨论】:

  • 我输入了连字符,但它仍在控制台中返回“Mon Oct 30 2017”。
  • 什么?如果我真的将上面的代码复制并粘贴到我的控制台中,我会得到Tue Oct 31 2017
  • 您在不同的时区。 .toDateString() 输出当地时间——你们中的一个住在格林威治以东,另一个住在格林威治以西。
  • 我也复制/粘贴了它。我发誓它仍然显示 30 号。
  • 我想我应该把它转换成UTC?
【解决方案2】:

在 ECMAScript 中,解析字符串是有问题的,即使格式正确,您传递的日期格式也会被视为 UTC,因此代表格林威治西部用户想要的前一天。

另见Why does Date.parse give incorrect results?

所以不要依赖内置的解析器,直接传递组件:

var halloween = new Date(new Date().getFullYear(), 9, 31);

console.log('Halloween is on ' + halloween.toString());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多