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

Posted

技术标签:

【中文标题】在javascript中将iso日期转换为毫秒【英文标题】:convert iso date to milliseconds in javascript 【发布时间】:2012-03-03 00:09:54 【问题描述】:

我可以将 iso 日期转换为毫秒吗? 例如我想转换这个iso

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

毫秒。

因为我想比较当前日期和创建日期。创建日期是iso日期。

【问题讨论】:

“毫秒”到底是什么意思?相对于哪个时间点的毫秒数?你是说 UNIX 时间戳吗? 就像在yahoo api中一样,日期以毫秒为单位1328796537,但在fb api中,日期以iso的形式显示2012-02-10T13:18:45+0000 Help parsing ISO 8601 date in javascript 的可能重复项 @mplungjan 相关,但不准确。我想得到两次之间的差异。 所以先使用链接将它们转换为日期,然后执行date1.getTime() - date2.getTime() - 这就是你所需要的 【参考方案1】:

试试这个

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 的评论错误转换为毫秒的错误。

【讨论】:

是的,日期不会在所有浏览器上解析。 See my answer on related question. 看看我对你答案的评论;) 这在 Firefox 中不起作用var myDate = new Date("2012-02-10T13:19:11+0000"); @mplungjan 为什么不使用this approach?我知道这很麻烦,但无论如何)) 呃……那个大写的“T”在里面做什么?这就是为什么它不起作用@mplungjan。【参考方案2】:

之前解决方案的简写是

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

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

另一种方法是使用 Date util 的 parse 方法,它只输出以毫秒为单位的 EPOCH 时间。

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

【讨论】:

你有一个小错字,'+' @stuart-siegler 实际上没有错字,'+' 以毫秒为单位返回日期。 @LordTribual "+new" 以毫秒为单位返回日期? @stuart-siegler 不是特别是“+new”,而是“+”可以解决问题,可以说是一种速记。例如+new Date() 返回1447857230137,它是以毫秒为单位的时间。 显式构造一个 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() 更具可读性。【参考方案3】:

2017 年的另一个选项是使用Date.parse()。然而,MDN 的documentation 指出,在 ES5 之前它是不可靠的。

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

有关详细信息,请参阅fiddle。

【讨论】:

内置解析器在 ECMAScript 2011 之后也不可靠。 :-)【参考方案4】:

是的,您可以在一行中执行此操作

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673

【讨论】:

这个函数的反义词是什么!?【参考方案5】:

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

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

【讨论】:

【参考方案6】:

另一种解决方案是像这样使用 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 对象上一样

【讨论】:

【参考方案7】:
var date = new Date()
console.log(" Date in MS last three digit = "+  date.getMilliseconds())
console.log(" MS = "+ Date.now())

使用这个我们可以得到毫秒数的日期

【讨论】:

【参考方案8】:

var date = new Date(date_string); var 毫秒 = date.getTime();

这对我有用!

【讨论】:

【参考方案9】:

如果想将 UTC 日期转换为毫秒 语法:Date.UTC(year, month, ?day, ?hours, ?min, ?sec, ?milisec); 例如:date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);console.log('miliseconds', date_in_mili);

【讨论】:

【参考方案10】:

如果有人想只获取来自 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

【讨论】:

以上是关于在javascript中将iso日期转换为毫秒的主要内容,如果未能解决你的问题,请参考以下文章

在Android中将日期和时间转换为毫秒

如何在android中将毫秒转换为日期格式?

如何在 Django 中将日期时间转换为毫秒?

在mongodb聚合管道中将毫秒转换为日期以进行分组?

将iso日期格式的字符串转换为毫秒。 ISO日期格式包含(“ yyyy-MM-dd”),并且没有时区

如何在 iOS/XCode 中将毫秒时间戳转换为日期和时间?