从本地时区中的字符串YYYY-MM-DD创建javascript日期对象
我已经构建了一个应用程序,它使用纯javascript日期对象,并用于格式化和操作对象 这个应用程序在我开发的格林尼治标准时间(GMT)中运行得很好,但是我现在在美国的西海岸,我发现我的许多日期对象由于时区差异而被丢弃 我正在从字符串创建日期对象,可以是从本地时区中的字符串YYYY-MM-DD创建javascript日期对象,javascript,date,datetime,Javascript,Date,Datetime,我已经构建了一个应用程序,它使用纯javascript日期对象,并用于格式化和操作对象 这个应用程序在我开发的格林尼治标准时间(GMT)中运行得很好,但是我现在在美国的西海岸,我发现我的许多日期对象由于时区差异而被丢弃 我正在从字符串创建日期对象,可以是YYYY-MM-DD或yyy-MM-DD HH:MM,例如新日期('2018-01-19')或新日期('2018-01-19 08:00') 问题是,当我从格式为YYYY-MM-DD的字符串创建日期时,它会创建对象,而不考虑本地时区 const
YYYY-MM-DD
或yyy-MM-DD HH:MM
,例如新日期('2018-01-19')
或新日期('2018-01-19 08:00')
问题是,当我从格式为YYYY-MM-DD
的字符串创建日期时,它会创建对象,而不考虑本地时区
const date1 = new Date('2018-01-19');
const date2 = new Date('2018-01-19 00:00');
const dateString1 = format(date1, 'YYYY-MM-DD'); // gives '2018-01-18'
const dateString2 = format(date2, 'YYYY-MM-DD'); // gives '2018-01-19'
这种行为并不一致,这取决于你是否消磨时间。如果传递时间,则日期对象固定为本地时区,如果不传递,则固定为UTC。我想要的是,如果我传递一个没有时间的datestring(只有年、月和日),它也会创建一个date对象,假设它是本地时区中一天的开始
const date1 = new Date('2018-01-19');
const date2 = new Date('2018-01-19 00:00');
const dateString1 = format(date1, 'YYYY-MM-DD'); // gives '2018-01-18'
const dateString2 = format(date2, 'YYYY-MM-DD'); // gives '2018-01-19'
为什么会这样?每次创建日期对象时,我是否必须将时间设置为00:00
From:“对ISO 8601格式的支持的不同之处在于,只有日期字符串(例如“1970-01-01”)被视为UTC,而不是本地。”
不建议从字符串解析日期;建议通过拆分字符串并使用单个组件作为参数来手动执行此操作。或者使用日期库。Sweet。谢谢你。我想知道他们为什么决定这样做?这不是一贯的行为。。。无论如何,我创建了一个小助手函数,在创建日期对象时将日期字符串传递给它,如果需要,它只需在字符串的末尾加上一个00:00:
返回新日期(dateString.length>10?dateString:
${dateString}00:00)
。似乎在耍把戏:-)这能回答你的问题吗?