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

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

返回2005年7月8日星期五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"));

也返回相同的结果。

我想解析时间:

没有时区。 而不调用构造函数Date。UTC或new日期(年、月、日)。 通过简单地将一个字符串传递到Date构造函数(没有原型方法)。

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


当前回答

Date对象本身无论如何都将包含timezone,返回的结果是以默认方式将其转换为字符串的结果。也就是说,你不能创建一个没有时区的日期对象。但是您可以通过创建自己的Date对象来模仿Date对象的行为。 然而,这最好交给像moment.js这样的库。

其他回答

我个人更喜欢@wawka的答案,然而,我也提出了一个不那么干净的技巧来解决这个问题,这是更简单的,如果你确定你想转换的字符串的格式,可以工作。

请看下面的代码片段:

var dateString = 2021- 08-02t00 var dateObj =新日期(数据+ z) 日志控制台。 var dateObjWithTZ =新日期 log控制台(“正常转换:”,dateObjWithTZ)

这在这种情况下是有效的,因为在日期时间字符串的末尾添加Z将使JS将此字符串视为UTC日期字符串,因此它不会向其添加时区差异。

解决方案几乎与@wawka的相同,但是它使用Math.abs处理不同时区的加减唱歌:

const date = new Date("2021-05-24T22:00:18.512Z")
const userTimezoneOffset = Math.abs(date.getTimezoneOffset() * 60000);
new Date(date.getTime() - userTimezoneOffset);

Timezone是Javascript的一部分。我使用以下代码根据时区调整日期。

var dt =新日期(“Fri Mar 11, 2022,下午4:03”); dt.setTime(dt. gettimezone胶印()*60 * 1000);//只是暂时的 document . write (dt toISOString ());

JavaScript中的日期只是在内部保持简单,因此日期-时间数据以UTC Unix历元(毫秒或毫秒)存储。

如果你想有一个“固定”的时间,无论你在地球上的任何时区都不会改变,你可以调整UTC时间以匹配当前的本地时区并保存它。在检索它时,无论您所在的本地时区是什么,它都会根据保存它的时区显示调整后的UTC时间,然后添加本地时区偏移量以获得“固定”时间。

保存日期(毫秒):

toUTC(datetime) {
  const myDate = (typeof datetime === 'number')
    ? new Date(datetime)
    : datetime;

  if (!myDate || (typeof myDate.getTime !== 'function')) {
    return 0;
  }

  const getUTC = myDate.getTime();
  const offset = myDate.getTimezoneOffset() * 60000; // It's in minutes so convert to ms
  return getUTC - offset; // UTC - OFFSET
}

检索/显示日期(毫秒):

fromUTC(datetime) {
  const myDate = (typeof datetime === 'number')
    ? new Date(datetime)
    : datetime;

  if (!myDate || (typeof myDate.getTime !== 'function')) {
    return 0;
  }

  const getUTC = myDate.getTime();
  const offset = myDate.getTimezoneOffset() * 60000; // It's in minutes so convert to ms
  return getUTC + offset; // UTC + OFFSET
}

然后你可以:

const saveTime = new Date(toUTC(Date.parse("2005-07-08T00:00:00+0000")));
// SEND TO DB....

// FROM DB...
const showTime = new Date(fromUTC(saveTime));

(新日期().toString())。替换(/ \w+-\d+ \(.*\)$/,"")

这将有输出:2018年7月10日星期二19:07:11

(新日期(“2005 - 07 - 08 - t11:22:33 + 0000”).toString())。替换(/ \w+-\d+ \(.*\)$/,"")

这将有输出:Fri july 08 2005 04:22:33

注意:返回的时间将取决于您的本地时区