在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日期转换为毫秒的主要内容,如果未能解决你的问题,请参考以下文章