Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript toLocaleDateString()正在减去一天_Javascript_Sql - Fatal编程技术网

Javascript toLocaleDateString()正在减去一天

Javascript toLocaleDateString()正在减去一天,javascript,sql,Javascript,Sql,我从一个SQL数据库中提取日期,该数据库将日期视为午夜开始的日期。当我在它们上使用toLocaleDateString()时,它会正确地设置它们的格式,但不会在失去一天之前 格式化前:2011-09-01T00:00:00 格式化后:8/31/2011 代码: 为什么它会这样做,我可以做什么内联修复来使它正常工作? 我也发现了,但我不是100%相信这是一个时区问题。如果你将代码分块运行,你会注意到新日期('2011-09-01T00:00:00')产生的输出类似于Wed Aug 31 2011

我从一个SQL数据库中提取日期,该数据库将日期视为午夜开始的日期。当我在它们上使用
toLocaleDateString()
时,它会正确地设置它们的格式,但不会在失去一天之前

格式化前:
2011-09-01T00:00:00

格式化后:
8/31/2011

代码:

为什么它会这样做,我可以做什么内联修复来使它正常工作?
我也发现了,但我不是100%相信这是一个时区问题。

如果你将代码分块运行,你会注意到
新日期('2011-09-01T00:00:00')
产生的输出类似于
Wed Aug 31 2011 20:00:00 GMT-0400(EDT)
(我的电脑现在在EDT)

这是因为():

假设时区的差异

给定日期字符串“2014年3月7日”,parse()假定为本地时间 区域,但给定ISO格式,如“2014-03-07”,它将假定 UTC时区。因此,使用这些字符串生成日期对象 除非系统设置为 UTC的本地时区。这意味着出现两个日期字符串 根据格式的不同,等效值可能会产生两个不同的值 正在转换的字符串的(此行为在 ECMAScript ed 6,以便将两者都视为本地)

将其转换为区域设置日期字符串会将其转换为适合浏览器区域设置的字符串。指示“默认为运行时的默认时区”

如果要确保字符串为UTC时间,请使用

new Date('2011-09-01T00:00:00').toLocaleDateString('en-US', {timeZone: 'UTC'})

我们在Google Chrome v87.0.4280 IOS上遇到了这个问题,但在使用相同浏览器的计算机上没有

问题是时区字符串的末尾不包含Z

“Z”是DateTimes的一种特殊情况。字面上的“Z”是 实际上是UTC时间ISO 8601日期时间标准的一部分。什么时候 “Z”(祖鲁语)被钉在一个时间的末尾,它表示那个时间 是UTC,所以实际上Z是时间的一部分

将Z添加到日期时间修复了该问题

new Date('2011-09-01T00:00:00Z').toLocaleDateString('en-US', {timeZone: 'UTC'})

您链接到的中描述的技术确实有效。不幸的是,正是因为这是一个时区问题。顺便说一句,如果原生JS日期行为太过限制,请尝试。回答很好,谢谢
new Date('2011-09-01T00:00:00Z').toLocaleDateString('en-US', {timeZone: 'UTC'})