Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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日期对象-如何将一般日期转换为今天的开始日期?_Javascript_Datetime - Fatal编程技术网

JavaScript日期对象-如何将一般日期转换为今天的开始日期?

JavaScript日期对象-如何将一般日期转换为今天的开始日期?,javascript,datetime,Javascript,Datetime,我有一个字符串格式的日期,如下所示: 2016-11-02 我使用date('2016-11-02')将其转换为JavaScript日期对象。我的本地时区是美国东部标准时间,上述时间将返回: Tue Nov 01 2016 20:00:00 GMT-0400 (Eastern Daylight Time) 我希望上面的通用日期输入(没有时间戳)和日期函数返回: Wed Nov 02 2016 00:00:00 GMT-0400 (Eastern Daylight Time) 我该怎么做?您

我有一个字符串格式的日期,如下所示:

2016-11-02
我使用
date('2016-11-02')
将其转换为JavaScript日期对象。我的本地时区是美国东部标准时间,上述时间将返回:

Tue Nov 01 2016 20:00:00 GMT-0400 (Eastern Daylight Time)
我希望上面的通用日期输入(没有时间戳)和日期函数返回:

Wed Nov 02 2016 00:00:00 GMT-0400 (Eastern Daylight Time)

我该怎么做?

您可以执行以下操作:

var myDate = '2016-11-02';

// UTC
console.log(new Date(myDate).toUTCString());

// Local
console.log(new Date(myDate).toTimeString());

第一个日志将返回UTC时间,第二个日志将提供本地时间。

您可以执行以下操作:

var myDate = '2016-11-02';

// UTC
console.log(new Date(myDate).toUTCString());

// Local
console.log(new Date(myDate).toTimeString());
第一个日志将返回UTC时间,第二个日志将提供本地时间。

根据,类似“2016-11-02”的字符串应解析为UTC,因此在偏移量不是00:00的时区中,它将表示2016-11-02 00:00:00以外的某个时间

如果希望将ISO 8601格式的日期字符串解析为本地,则必须自己完成或使用库。解析为本地的简单函数是:

/*将ISO 8601格式的日期字符串解析为本地
**@param{string}s-yyyy-mm-dd格式的日期
**@返回所提供字符串的{Date}“local”日期,或
**如果字符串无效,则日期无效。
*/
函数parseISOasLocal(s){
var b=s.split(/\D/);
var d=新日期(b[0],--b[1],b[2]);
返回d&d.getMonth()==b[1]?d:新日期(NaN);
}
console.log(parseISOasLocal('2016-11-02').toLocalString())根据,类似“2016-11-02”的字符串应解析为UTC,因此在偏移量不是00:00的时区中,它将表示2016-11-02 00:00:00以外的某个时间

如果希望将ISO 8601格式的日期字符串解析为本地,则必须自己完成或使用库。解析为本地的简单函数是:

/*将ISO 8601格式的日期字符串解析为本地
**@param{string}s-yyyy-mm-dd格式的日期
**@返回所提供字符串的{Date}“local”日期,或
**如果字符串无效,则日期无效。
*/
函数parseISOasLocal(s){
var b=s.split(/\D/);
var d=新日期(b[0],--b[1],b[2]);
返回d&d.getMonth()==b[1]?d:新日期(NaN);
}

console.log(parseISOasLocal('2016-11-02').toLocalString())
@johankarsson将
EST
添加到字符串的末尾,我得到了
2016年11月2日星期三01:00:00 GMT-0400(东部夏令时)
。我要找的是2016年11月2日星期三00:00:00 GMT-0400(东部夏令时)
@JohanKarlsson,就是他干的。使用
EDT
进行夏令时调整是否安全?我不想提前一个小时到达Sunday@JohanKarlsson-这是一个糟糕的建议。日期字符串没有与其关联的时区。解析日期加时区完全依赖于实现,因此不可靠。此外,时区名称或缩写也没有标准,EST可能代表3个不同时区中具有不同偏移量的任意一个。@Johankarsson在字符串末尾添加
EST
,这给了我
Wed Nov 02 2016 01:00:00 GMT-0400(东部夏时制)
。我要找的是2016年11月2日星期三00:00:00 GMT-0400(东部夏令时)@JohanKarlsson,就是他干的。使用
EDT
进行夏令时调整是否安全?我不想提前一个小时到达Sunday@JohanKarlsson-这是一个糟糕的建议。日期字符串没有与其关联的时区。解析日期加时区完全依赖于实现,因此不可靠。此外,时区名称或缩写没有标准,EST可能代表3个不同时区中具有不同偏移量的任意一个。在三元语句中检查
d.getMonth()==b[1]
有什么附加值?它检查日期和月份的值是否有效,因此
parseAsLocal('2016-13-01'))
parseISOasLocal('2016-12-32')
将返回一个无效的日期,而不是2017-01-01的日期。在三元语句中检查
d.getMonth()==b[1]
的附加值是什么?它检查day和month的值是否有效,因此
parseISOasLocal('2016-13-01')
parseISOasLocal('2016-12-32')
将返回无效日期,而不是2017-01-01的日期。