我从数据库中获得以下格式的日期:
yyyy dd
当我使用此字符串创建javascript对象时,它将在日期前一天生成。
您可以在您的控制台中测试这一点:
var d = new Date("2015-02-01");
d你将得到1月31日!我检验了许多理论,但没有人回答这个问题。
我的结论是,js是有意这样做的。我试过研究“为什么”,但找不到解释。为什么js以这种方式构建日期,但只使用这种格式?是否有办法绕过它,或者我必须构建日期,然后将其设置为第二天?
PS:“如何从数据库中更改日期的格式”不是我要问的问题,这就是为什么我不会在这里放置任何db信息。
发布于 2015-02-05 14:39:21
一些浏览器将部分日期字符串解析为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格林尼治时间-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. 发布于 2015-02-05 21:36:13
在javascript中,Date对象在内部表示为自1970年1月1日以来的毫秒数00:00:00UTC。因此,没有将其视为正常意义上的“日期”,而是尝试将日期对象视为由整数(没有时区)表示的“时间点”。
当使用字符串构造Date对象时,实际上只是调用解析函数。大多数日期时间格式(包括ISO 8601)允许您降低日期字符串的精度。
为了降低精度,可以从任何日期和时间表示中删除任意数量的值,但从最小到最重要的顺序。
例如,2015-02-01将代表2015年2月1日的一天。
这导致javascript陷入两难境地,因为日期对象总是精确到毫秒。Javascript不能存储减少的精确日期,因为它只是1970年1月1日以来毫秒的整数。因此,它做的第二个最好的事情是假设午夜的时间(00:00:00) (如果没有指定),如果没有指定UTC的时区。
所有有效的javascript实现都应该给出相同的结果为此
var d = new Date("2015-02-01");
alert(d.getTime());
1422748800000当将日期输出到某个调试器(通常是不清楚的)或使用getter方法(因为使用了本地时区)时,就会出现逐日输出问题。在浏览器中,这将是操作系统时区。任何“西方”的格林威治标准时间可能会看到这个问题,因为他们有一个负的UTC抵消。请注意,如果您真正感兴趣的是日期而不是时间点,也有使用UTC时区的UTC等价函数。
https://stackoverflow.com/questions/28344408
复制相似问题