我想在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对象。
这是我想出的解决这个问题的方法,对我来说很有效。
图书馆使用:momentjs与简单的javascript日期类。
步骤1。
将字符串日期转换为moment对象(PS:只要未调用toDate()方法,moment将保留原始日期和时间):
const dateMoment = moment("2005-07-08T11:22:33+0000");
步骤2。
从之前创建的moment对象中提取小时和分钟值:
const hours = dateMoment.hours();
const mins = dateMoment.minutes();
步骤3。
将时间转换为日期(PS:这将根据浏览器/机器的时区更改原始日期,但不要担心,请阅读第4步):
const dateObj = dateMoment.toDate();
步骤4。
手动设置步骤2中提取的小时和分钟。
dateObj.setHours(hours);
dateObj.setMinutes(mins);
第5步。
dateObj现在将显示原始日期,没有任何时区差异。即使日光时间的变化也不会对日期对象产生任何影响,因为我们手动设置了原始的小时和分钟。
希望这能有所帮助。
我遇到了同样的问题,然后想起了我正在从事的一个遗留项目的一些问题,以及他们是如何处理这个问题的。当时我并不理解,也并不在意,直到我自己遇到了这个问题
var date = '2014-01-02T00:00:00.000Z'
date = date.substring(0,10).split('-')
date = date[1] + '-' + date[2] + '-' + date[0]
new Date(date) #Thu Jan 02 2014 00:00:00 GMT-0600
不管出于什么原因,将日期传递为“01-02-2014”将时区设置为0并忽略用户的时区。这可能是Date类中的一个侥幸,但它在一段时间以前就存在,今天也存在。而且它似乎可以跨浏览器工作。你自己试试吧。
这段代码是在一个全局项目中实现的,在这个项目中,时区很重要,但查看日期的人并不关心它被引入的确切时间。
日期被正确解析,只是toString将其转换为您的本地时区:
let s = "2005-07-08T11:22:33+0000";
let d = new Date(Date.parse(s));
//此日志为我
//“2005年7月8日星期五13:22:33 GMT+0200(中欧夏季时间)”
//和其他东西给你
console.log (d.toString ())
//此日志
//星期五,2005年7月8日11:22:33 GMT
// for everyone
console.log (d.toUTCString ())
Javascript Date对象是时间戳-它们只包含从epoch开始的毫秒数。Date对象中没有时区信息。这个时间戳代表哪个日历日期(日、分、秒)是一个解释问题(其中一个是…字符串方法)。
上面的例子显示日期被正确地解析了——也就是说,它实际上包含了一个毫秒数,对应于GMT的"2005-07-08T11:22:33"。