添加GMT小时的新日期(“”)

时间:2017-04-09 13:49:39

标签: javascript date

var start = new Date("2017-04-09T21:00:00");

输出:Mon Apr 10 2017 05:00:00 GMT + 0800(+08)

它假设是:Sun Apr 09 2017 21:00:00 GMT + 0800(+08)

2 个答案:

答案 0 :(得分:1)

这很容易。你可以试试这个:

max(id)

答案 1 :(得分:1)

有一条黄金法则,你永远不应该用Date构造函数解析字符串(或Date.parse,它们等同于解析)。

根据ECMA-262,没有时区的ISO 8601格式日期应视为本地日期:

  

如果不存在时区偏移,则解释仅限日期的表单   因为UTC时间和日期时间表格被解释为当地时间。

所以new Date("2017-04-09T21:00:00")应该在2017年4月9日下午9:00返回主持人时区的日期。

但是,Safari 10和Chrome 57中的测试显示" 2017-04-09T21:00:00"被视为Z或GMT + 0000。 Firefox 49奇怪地将其视为UTC然后以错误的方式调整本地时区。但是,Firefox 38正确地将其视为本地。

所以总是手动解析字符串。使用库或编写一个简短的函数,例如



// Parse 2017-04-09T11:00:00.000 as local
function parseISOLocal(s) {
  var b = s.split(/\D/);
  return new Date(b[0], b[1]-1, b[2], (b[3]||0),
                 (b[4]||0), (b[5]||0), (b[6]||0));
}

var s = '2017-04-09T21:00:00.000';
console.log('Built-in parser: ' + new Date(s).toString());
console.log('parseISOLocal  : ' + parseISOLocal(s).toString());