在javascript中将iso日期转换为毫秒


87

我可以将iso日期转换为毫秒吗?例如我要转换此iso

2012-02-10T13:19:11+0000

到毫秒。

因为我想从创建日期比较当前日期。创建的日期是一个iso日期。


1
您所说的“毫秒”到底是什么意思?相对于哪个时间点的毫秒?您是指UNIX时间戳吗?
Pekka '02

就像在yahoo api中一样,日期以毫秒为单位显示1328796537,但是在fb api中,日期以iso形式显示2012-02-10T13:18:45+0000
Robin Carlo Catacutan 2012年


@mplungjan相关,但不完全相同。我想得到两次之间的区别。
罗宾·卡塔卡丹

因此,请首先使用链接将日期翻译为日期,然后做date1.getTime() - date2.getTime()-这就是您所需要的
mplungjan'2

Answers:


145

试试这个

var date = new Date("11/21/1987 16:00:00"); // some mock date
var milliseconds = date.getTime(); 
// This will return you the number of milliseconds
// elapsed from January 1, 1970 
// if your date is less than that date, the value will be negative

console.log(milliseconds);

编辑

您提供了一个ISO日期。它也被Date对象的构造函数接受

var myDate = new Date("2012-02-10T13:19:11+0000");
var result = myDate.getTime();
console.log(result);

编辑

我发现最好的方法是手动消除偏移量。

var myDate = new Date("2012-02-10T13:19:11+0000");
var offset = myDate.getTimezoneOffset() * 60 * 1000;

var withOffset = myDate.getTime();
var withoutOffset = withOffset - offset;
console.log(withOffset);
console.log(withoutOffset);

似乎正常。至于将ISO字符串转换为Date对象的问题,您可以参考提供的链接。

编辑

修复了根据Prasad19sara的注释将错误转换为毫秒的错误。


是的,日期无法在所有浏览器上解析。请参阅我对相关问题的回答。
维克·大卫

并查看我对您的回答的评论;)
mplungjan'2

这在Firefox中不起作用var myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan'2

1
@mplungjan为什么不使用这种方法?我知道这很麻烦,但无论如何))
Oybek '02

呃...那是那个大写字母“ T”呢?这就是为什么@mplungjan不起作用的原因。
wle8300

28

先前解决方案的简写是

var myDate = +new Date("2012-02-10T13:19:11+0000");

它进行即时类型转换,并直接以毫秒格式输出日期。

另一种方法是使用Date util的解析方法,该方法仅输出以毫秒为单位的EPOCH时间。

var myDate = Date.parse("2012-02-10T13:19:11+0000");

您在这里有一些错字,“ +”
Stuart Siegler

@ stuart-siegler实际上没有错字,“ +”返回以毫秒为单位的日期。
LordTribual 2015年

@LordTribual“ + new”以毫秒为单位返回日期?
Stuart Siegler,2015年

1
@ stuart-siegler不是专门的“ + new”,而是“ +”可以解决问题,是一种速记方法。例如,+new Date()返回1447857230137的时间是毫秒。
LordTribual 2015年

1
显式构造一个JavaScript Number对象会更加清晰:const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))new Date('2017-09-26T20:24:18.801Z').getTime()或者new Date('2017-09-26T20:24:18.801Z').valueOf()更具可读性。
David G

5

截至2017年的另一种选择是使用Date.parse()。MDN的文档指出,但是,它在ES5之前是不可靠的。

var date = new Date(); // today's date and time in ISO format
var myDate = Date.parse(date);

有关更多详细信息,请参见小提琴


ECMAScript 2011之后,内置解析器也不可靠。:-)
RobG

2

另一种可能的解决方案是比较当前日期January 1, 1970,就可以得到January 1, 1970通过new Date(0);

var date = new Date(); 
var myDate= date - new Date(0);


1

另一个解决方案可能是使用Number对象解析器,如下所示:

let result = Number(new Date("2012-02-10T13:19:11+0000"));
let resultWithGetTime = (new Date("2012-02-10T13:19:11+0000")).getTime();
console.log(result);
console.log(resultWithGetTime);

转换为毫秒,就像getTime()Date对象上一样


0
var date = new Date()
console.log(" Date in MS last three digit = "+  date.getMilliseconds())
console.log(" MS = "+ Date.now())

使用这个我们可以得到以毫秒为单位的日期



0

如果要将UTC日期转换为毫秒
语法:Date.UTC(年,月,?日,?小时,?分钟,?秒,?milisec);
例如:
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);


0

万一任何人只想ISO日期开始获取时间,以下内容将很有帮助。我正在寻找那个,但找不到任何问题。因此,万一有人看到会有所帮助。

let isoDate = '2020-09-28T15:27:15+05:30';
let result = isoDate.match(/\d\d:\d\d/);
console.log(result[0]);

输出将是isoDate中唯一的时间,

15:27
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.