如何计算打字稿中两个日期之间的时间
Posted
技术标签:
【中文标题】如何计算打字稿中两个日期之间的时间【英文标题】:How can I calculate the time between 2 Dates in typescript 【发布时间】:2013-02-05 11:07:59 【问题描述】:这适用于 javascript
new Date() - new Date("2013-02-20T12:01:04.753Z")
但是在打字稿中我不能休息两个新日期
Date("2013-02-20T12:01:04.753Z")
由于参数与日期签名不匹配而无法工作
【问题讨论】:
【参考方案1】:它不起作用,因为 Date - Date
完全依赖于 TypeScript 旨在防止的类型强制。
使用+
前缀可以解决此问题:
var t = Date.now() - +(new Date("2013-02-20T12:01:04.753Z"));
或者,如果您不想使用Date.now()
:
var t = +(new Date()) - +(new Date("2013-02-20T12:01:04.753Z"));
See discussion here.
或者查看下面 Siddharth Singh 的回答,以获得使用 valueOf()
的更优雅的解决方案
【讨论】:
批准链接编辑,因为由于 CodePlex 关闭,现有链接不再提供原始讨论;除非有人全面反对使用 web.archive.org,否则这不会以任何方式损坏或破坏原始帖子,而是保留其意义。【参考方案2】:为了计算差异,您必须输入+
运算符,
这样typescript
将日期转换为数字。
+new Date()- +new Date("2013-02-20T12:01:04.753Z")
您可以从那里创建一个公式将差异转换为minutes
或hours
。
【讨论】:
【参考方案3】:// TypeScript
const today = new Date();
const firstDayOfYear = new Date(today.getFullYear(), 0, 1);
// Explicitly convert Date to Number
const pastDaysOfYear = ( Number(today) - Number(firstDayOfYear) );
【讨论】:
【参考方案4】:在打字稿中应该这样做:
(new Date()).valueOf() - (new Date("2013-02-20T12:01:04.753Z")).valueOf()
更好的可读性:
var eventStartTime = new Date(event.startTime);
var eventEndTime = new Date(event.endTime);
var duration = eventEndTime.valueOf() - eventStartTime.valueOf();
【讨论】:
这是最正确的方法,因为 javascript 在对对象进行算术运算时在内部使用“valueOf”。 Typescript 应该足够聪明(不幸的是,它还没有)来支持这一点,因为它已经知道 Date 的 valueOf 方法返回一个在 lib.d.ts 中定义的数字 有趣的是,打字稿现在非常聪明,即使你没有定义eventStartTime
和 eventEndTime
,持续时间也会被输入为 number
(意思是如果你真的在这里取第三行代码在这里持续时间本身就是一个数字)【参考方案5】:
使用getTime
method 获取自 1970-01-01 以来的总毫秒数,并减去这些时间:
var time = new Date().getTime() - new Date("2013-02-20T12:01:04.753Z").getTime();
【讨论】:
我认为你混淆了 getTime() 和 valueOf()。根据文档, getTime() “以毫秒为单位获取时间值。”而 valueOf() 则“返回自 UTC 1970 年 1 月 1 日午夜以来以毫秒为单位的存储时间值。” 两者都做同样的事情:new Date(1970, 1, 1, 0, 0, 0, 0).valueOf() // returns 2674800000 new Date(1970, 1, 1, 0, 0, 0, 0).getTime() // returns 2674800000
@KenLyon 来自 MDN getTime 文档:您可以使用此方法帮助将日期和时间分配给另一个 Date 对象。 此方法在功能上等同于 valueOf() 方法。
一个提示,不要使用new Date().getTime()
,而是使用Date.now()
,这样您就不会不必要地创建新对象。以上是关于如何计算打字稿中两个日期之间的时间的主要内容,如果未能解决你的问题,请参考以下文章