【问题标题】:Calculate difference between 2 dates in ISO format in JavaScript/TS在 JavaScript/TS 中计算 ISO 格式的 2 个日期之间的差异
【发布时间】:2019-01-23 17:45:51
【问题描述】:

我有 2 个 ISO 格式的日期,如下所示:

startDate: "2018-09-14T00:20:12.200Z"
endDate: "2018-09-16T00:18:00.000Z"

我要做的是计算这 2 天之间的差异。因此,对于给定的日期,它将是 1 天、21 小时、47 分钟和 40 秒(如果减法不正确,请原谅我)。

尝试使用以下方法:

const start = new Date(startDate).getTime();
const end = new Date(endDate).getTime();
return Math.abs(end - start).toString();

但这似乎不起作用。

有什么线索吗?

【问题讨论】:

  • 如果你减去日期(没有 getTime)你会得到差异。但是,我认为它是毫秒。你最好使用 momentjs 或类似的东西。

标签: javascript


【解决方案1】:

yBrodsky 建议使用 moment.js 可能是最好的主意,但如果你想知道如何在这里做数学,它会是这样的:

const start = new Date(startDate).getTime();
const end = new Date(endDate).getTime();
let seconds = Math.round(Math.abs(end - start) / 1000); // We'll round away millisecond differences.
const days = Math.floor(seconds / 86400);
seconds -= days * 86400;
const hours = Math.floor(seconds / 3600);
seconds -= hours * 3600;
minutes = Math.floor(seconds / 60);
seconds -= minutes * 60;

这会给您留下hoursminutesseconds 作为数字,您可以随意将其格式化为字符串结果。

【讨论】:

    【解决方案2】:

    var startDate =  "2018-09-14T00:20:12.200Z"
    var endDate = "2018-09-16T00:18:00.000Z"
    
    const start = new Date(startDate).getTime();
    const end = new Date(endDate).getTime();
    const milliseconds = Math.abs(end - start).toString()
    const seconds = parseInt(milliseconds / 1000);
    const minutes = parseInt(seconds / 60);
    const hours = parseInt(minutes / 60);
    const days = parseInt(hours / 24);
    const time = days + ":" + hours % 24 + ":" + minutes % 60 + ":" + seconds % 60;
    console.log(time)

    【讨论】:

    • 为什么需要将毫秒转换为字符串?并再次将其解析回整数?
    【解决方案3】:

    以下作品。注意事项:

    1. 不需要getTime(),因为new Date() 构造函数以毫秒为单位返回时间。
    2. 日期应始终采用 RFC2822 或 ISO 格式,否则它在各种浏览器中变得无用,即使在使用 moment.js 时也是如此。

    如果你可以使用moment.jsGet time difference using moment.

    Refer this 知道为什么只需要使用标准化格式。

    var unitmapping = {"days":24*60*60*1000,
                       "hours":60*60*1000,
                       "minutes":60*1000,
                       "seconds":1000};
    
    function floor(value)
    {
        return Math.floor(value)
    }
    
    function getHumanizedDiff(diff)
    {
        return floor(diff/unitmapping.days)+" days "+
               floor((diff%unitmapping.days)/unitmapping.hours)+" hours "+
               floor((diff%unitmapping.hours)/unitmapping.minutes)+" minutes "+
               floor((diff%unitmapping.minutes)/unitmapping.seconds)+" seconds "+
               floor((diff%unitmapping.seconds))+" milliseconds";
    }
    
    console.log(getHumanizedDiff(new Date("2018-09-16T00:18:00.000Z") - new Date("2018-09-14T00:20:12.200Z")));
    console.log(getHumanizedDiff(new Date("2018-09-16T00:18:00.000Z") - new Date("2018-09-04T00:20:02.630Z")));
    console.log(getHumanizedDiff(new Date("2018-09-17T00:16:04.000Z") - new Date("2018-09-14T00:20:12.240Z")));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多