【发布时间】:2015-02-05 12:48:54
【问题描述】:
我以这种格式从数据库中获取日期:
yyyy-mm-dd
当我使用此字符串创建 javascript Date 对象时,它会在日期前一天构建。
您可以在控制台中进行测试:
var d = new Date("2015-02-01");
d
您将在 1 月 31 日收到!我测试了很多理论,但没有一个能回答这个问题。
- 日期不是从零开始的,否则会给出 2 月 00 日,而不是 1 月 31 日
- 它不是在执行数学方程式,而是从月和/或年中减去天
- 日期 (2015-02-01) = 1969 年 12 月 31 日,星期三
- 日期(“2015-01”)= 2014 年 12 月 31 日,星期三
- 不会混淆当月的日期
- 日期(“2015-08-02”)= 2015 年 8 月 1 日星期六
- 如果这是真的,那么日期应该是 2015 年 2 月 8 日
- 如果您使用不同的格式创建日期,它可以正常工作
- 日期(“02/01/2015”)= 2015 年 2 月 1 日
我的结论是 js 是有目的的这么做的。我曾尝试研究“为什么”,但找不到解释。 为什么 js 会这样构建日期,但只能使用这种格式? 有没有办法绕过它,还是我必须构建日期,然后将其设置为第二天?
PS:“如何从数据库更改日期的格式”不是我要问的,这就是为什么我没有在这里放任何数据库信息的原因。
【问题讨论】:
-
我不确定,但这可能是时区问题吗?
-
你的最后一个问题和你的PS相互矛盾。我只是将数据库结果转换为支持格式并将其用于日期。不要添加或删除天数。至于为什么这样做......也许是这样:给定日期字符串“2014 年 3 月 7 日”,parse() 假定为本地时区,但给定 ISO 格式,例如“2014-03-07”,它将假定UTC 的时区。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
Chrome 工作正常。
new Date("2015-02-01");-->Sun Feb 01 2015 03:00:00 GMT+0300 (MSK) -
@gorpacrate 不适合我。新日期(“2015-02-01)-> 2015 年 1 月 31 日星期六。
-
哈,有趣。那是在我的mac上。刚刚在 chrome for windows 中尝试过 - 是的,现在是 2015 年 1 月 31 日星期六。
标签: javascript date