不带时区 javascript 的解析日期

我想在JavaScript中解析一个没有时区的日期。我试过了:

new Date(Date.parse("2005-07-08T00:00:00+0000"));

哪个返回(中欧夏令时):Fri Jul 08 2005 02:00:00 GMT+0200

new Date(Date.parse("2005-07-08 00:00:00 GMT+0000"));

返回相同的结果,并且:

new Date(Date.parse("2005-07-08 00:00:00 GMT-0000"));

还返回相同的结果。

我想解析时间:

  1. 没有时区。
  2. 而不调用构造函数或新 .Date.UTCDate(year, month, day)
  3. 只需将字符串传递到 Date 构造函数中(无需原型方法)。

我必须生成一个 Date 对象,而不是一个 String。


答案 1

我有同样的问题。我得到一个字符串形式的日期,例如:“2016-08-25T00:00:00”,但我需要具有正确时间的 Date 对象。要将 String 转换为对象,我使用 getTimezoneOffset:

var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);

getTimezoneOffset()将返回以太币负值或正值。必须将其减去才能在世界的每个位置工作。


答案 2

日期被正确解析,只是将其转换为您的本地时区:toString

let s = "2005-07-08T11:22:33+0000";
let d = new Date(Date.parse(s));

// this logs for me 
// "Fri Jul 08 2005 13:22:33 GMT+0200 (Central European Summer Time)" 
// and something else for you

console.log(d.toString()) 

// this logs
// Fri, 08 Jul 2005 11:22:33 GMT
// for everyone

console.log(d.toUTCString())

Javascript Date对象是时间戳 - 它们仅包含自纪元以来的毫秒数。Date 对象中没有时区信息。此时间戳表示哪个日历日期(天,分钟,秒)是解释(方法之一)的问题。to...String

上面的示例显示日期被正确解析 - 也就是说,它实际上包含对应于 GMT 中的“2005-07-08T11:22:33”的毫秒数。