我有一个字符串格式的日期,如下所示:
2016-11-02
我使用date('2016-11-02')
将其转换为JavaScript日期对象。我当地的时区是EST,上面的时区将返回:
Tue Nov 01 2016 20:00:00 GMT-0400 (Eastern Daylight Time)
我希望上面的通用日期输入(没有时间戳)和日期函数返回:
Wed Nov 02 2016 00:00:00 GMT-0400 (Eastern Daylight Time)
我该怎么做?
答案 0 :(得分:0)
您可以执行以下操作:
var myDate = '2016-11-02';
// UTC
console.log(new Date(myDate).toUTCString());
// Local
console.log(new Date(myDate).toTimeString());
第一个日志将返回UTC时间,第二个日志将为您提供当地时间。
答案 1 :(得分:0)
根据ECMA-262,像“2016-11-02”这样的字符串应该被解析为UTC,因此在偏移量不是00:00的时区中,它将代表2016-11之外的一些时间-02 00:00:00。
如果要将ISO 8601格式的日期字符串解析为本地,则必须自己进行或使用库。一个简单的解析为local的函数是:
/* Parse an ISO 8601 format date string as local
** @param {string} s - date in yyyy-mm-dd format
** @returns {Date} "local" date for provided string, or an
** invalid date if string is invalid.
*/
function parseISOasLocal(s) {
var b = s.split(/\D/);
var d = new Date(b[0], --b[1], b[2]);
return d && d.getMonth() == b[1]? d : new Date(NaN);
}
console.log(parseISOasLocal('2016-11-02').toLocaleString());