我以这种格式从数据库中获取日期:
yyyy-mm-dd
当我使用这个字符串创建一个 javascript 日期对象时,它会在日期前一天构建。
您可以在控制台中进行测试:
var d = new Date("2015-02-01");
d
您将获得 1 月 31 日!我测试了很多理论,但没有一个能回答问题。
- 日期不是从零开始的,否则它会给出 Feb 00,而不是 Jan 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:“如何从数据库中更改日期格式”不是我要问的,这就是为什么我不在此处放置任何数据库信息的原因。
最佳答案
有些浏览器将部分日期字符串解析为 UTC,有些浏览器解析为本地时间,
所以当你阅读它时,本地化时间可能因浏览器而异
按时区偏移。
如果您可以强制日期为 UTC 并添加本地偏移量
希望时间保证本地:
1. set UTC time:
var D= new Date("2015-02-01"+'T00:00:00Z');
2. adjust for local:
D.setMinutes(D.getMinutes()+D.getTimezoneOffset());
D 的值:(本地日期) 2015 年 2 月 1 日星期日 00:00:00GMT-0500(东部标准时间)
偏移量将是本地时间。
Some differences between browsers when time zone is not specified in a parsed string:
(tested on Eastern Standard Time location)
(new Date("2015-02-01T00:00:00")).toUTCString();
Firefox 35: Sun, 01 Feb 2015 05:00:00 GMT
Chrome 40: Sun, 01 Feb 2015 00:00:00 GMT
Opera 27: Sun, 01 Feb 2015 00:00:00 GMT
IE 11: Sun, 01 Feb 2015 05:00:00 GMT
IE and Firefox set the Date as if it was local, Chrome and Opera as if it was UTC.
关于javascript - 为什么js会从一个特定格式的Date对象中减去一天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344408/