JS的时差有错误的结果

时间:2013-07-01 19:35:45

标签: javascript

我有两个文本输入字段,用户可以以“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,这显然是错误的:))。我误解了什么吗?

4 个答案:

答案 0 :(得分:5)

您无法使用此类日期。

请尝试以下方法:

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。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

通常在我们计算时差时。

  

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

检查此post

答案 3 :(得分:0)

也:

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()

P.S。一个类似的问题已经回答long long time ago