Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
从本地时区中的字符串YYYY-MM-DD创建javascript日期对象_Javascript_Date_Datetime - Fatal编程技术网

从本地时区中的字符串YYYY-MM-DD创建javascript日期对象

从本地时区中的字符串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

我已经构建了一个应用程序,它使用纯javascript日期对象,并用于格式化和操作对象

这个应用程序在我开发的格林尼治标准时间(GMT)中运行得很好,但是我现在在美国的西海岸,我发现我的许多日期对象由于时区差异而被丢弃

我正在从字符串创建日期对象,可以是
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
。似乎在耍把戏:-)这能回答你的问题吗?