【问题标题】:time difference in JS has wrong result [duplicate]JS中的时差结果错误[重复]
【发布时间】:2013-07-01 19:35:45
【问题描述】:

我有两个文本输入字段,用户可以在其中输入格式为“hh:mm”的时间。主要部分如下代码:

    var time1 = new Date("01/01/2013 " + time1input);   
    var time2 = new Date("01/01/2013 " + time2input);
    var difference = new Date(time2 - time1);

结果总是从 01:00 到高(例如 08:00 - 04:00 结果为 05:00,这显然是错误的 :))。我是不是误会了什么?

【问题讨论】:

  • 是什么让您认为在 JavaScript 中减去日期可以正常工作?
  • 也许是因为我是一个天真的 javascript 初学者

标签: javascript


【解决方案1】:

你不能使用这样的日期。

请尝试以下方法:

var time1input = "04:00";
var time2input = "08:00";

var time1 = new Date("01/01/2013 " + time1input);   
var time2 = new Date("01/01/2013 " + time2input);
var difference = time2.getTime() - time1.getTime();
console.log(difference / 60 / 60 / 1000); //<- whittle this down to hours

这将注销“4”。

如果您正在处理时间,请使用 http://momentjs.com/ 之类的东西,它可以让您做一些很酷的事情,例如......

difference = moment(time2).diff(time1, 'hours'); //<- will return 4

格式(hh:mm):(假设使用与第一个示例的差异)

var hours = Math.floor(difference / 60 / 60 / 1000);
var minutes = Math.round(difference / 60 / 1000) % 60;
var formattedString = (hours > 10 ? hours : "0" + hours) + ":" + (minutes > 10 ? minutes : "0" + minutes);

4 小时时差将返回“04:00”,13 小时 30 分钟时差将返回 13:30。

【讨论】:

  • 我写的是 Moment.js :(
  • 噢,对不起,伙计。超级有用的库,每当有人说“日期”时,我总是“转到”。
  • 哇哦。但是如果我希望差异是 hh:mm 格式呢?
  • 已更新。真的有一百种不同的方法......我给出的例子没有考虑多天的差异(即2天将给出48小时)。您将不得不解决这个问题。
  • var time1 = new Date("01/01/2013 " + leaveTimeInput);说无效日期。虽然离开时间输入是“04:00”
【解决方案2】:

查看getTime 方法。这可能有效:

var difference = new Date(time2.getTime() - time1.getTime());

【讨论】:

【解决方案3】:

通常在我们计算时差时。

我们曾经将它转换为毫秒,找到差异并转换 返回格式。

检查这个post

【讨论】:

    【解决方案4】:

    还有:

    var time1 = new Date("01/01/2013 " + time1input)
    var time2 = new Date("01/01/2013 " + time2input)
    var difference = time2 - time1
    

    difference 是以毫秒为单位的差异,因此要获得小时差异,您可以这样做:

    var time1 = new Date("01/01/2013 04:00")
    var time2 = new Date("01/01/2013 08:00")
    var difference = (time2 - time1)/1000/60/60
    console.log(difference)
    # => 4
    

    注意可以直接操作Date对象,不需要调用.getTime()

    附言long long time ago 已经回答了类似的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 2016-03-19
      相关资源
      最近更新 更多