我正在从SQL数据库中提取日期,该日期将其视为从午夜开始的日期。当我开始使用toLocaleDateString()它们时,它会正确格式化它们,但是不会浪费一天。
toLocaleDateString()
格式化之前: 2011-09-01T00:00:00
2011-09-01T00:00:00
格式化后: 8/31/2011
8/31/2011
代码:
plan.dateReceived = new Date(plan.dateReceived).toLocaleDateString()+','+plan.dateReceived;
如果您分段运行代码,则会注意到new Date('2011-09-01T00:00:00')产生的输出类似Wed Aug 31 2011 20:00:00 GMT-0400 (EDT)(我的计算机现在处于EDT中)。
new Date('2011-09-01T00:00:00')
Wed Aug 31 2011 20:00:00 GMT-0400 (EDT)
这是因为(doc):
假定时区的差异 给定日期字符串为“ 2014年3月7日”,parse()假定为本地时区,但是给定ISO格式(如“ 2014-03-07”),则它将假定为UTC时区。因此,使用这些字符串生成的Date对象将代表不同的时间,除非系统设置了UTC的本地时区。这意味着,两个看起来相等的日期字符串可能会导致两个不同的值,具体取决于要转换的字符串的格式(此行为在ECMAScript第6版中已更改,因此都将被视为本地)。
假定时区的差异
给定日期字符串为“ 2014年3月7日”,parse()假定为本地时区,但是给定ISO格式(如“ 2014-03-07”),则它将假定为UTC时区。因此,使用这些字符串生成的Date对象将代表不同的时间,除非系统设置了UTC的本地时区。这意味着,两个看起来相等的日期字符串可能会导致两个不同的值,具体取决于要转换的字符串的格式(此行为在ECMAScript第6版中已更改,因此都将被视为本地)。
将其转换为语言环境日期字符串会将其转换为适合浏览器语言环境的字符串。 文档指出“默认值为运行时的默认时区”。
如果要确保字符串采用UTC时间,请使用
new Date('2011-09-01T00:00:00').toLocaleDateString('en-US', {timeZone: 'UTC'})