时差1小时

时间:2015-03-23 14:08:19

标签: javascript

我有以下javascript函数:

timeDiff = function(date, time1, time2, time3, time4) {
    var dateVmS = convertToDate(date, time1);
    var dateVmE = convertToDate(date, time2);
    var dateNmS = convertToDate(date, time3);   
    var dateNmE = convertToDate(date, time4);

    console.log(dateVmS);   
    console.log(dateVmE);
    console.log(dateNmS);
    console.log(dateNmE);

    return new Date((dateVmE.getTime() - dateVmS.getTime())
                  + (dateNmE.getTime() - dateNmS.getTime()));
}

这些是日期的日志:

  • 2015年4月23日星期四08:15:00 GMT + 0200(中欧夏令时)
  • 2015年4月23日星期四12:02:00 GMT + 0200(中欧夏令时)
  • 2015年4月23日星期四12:37:00 GMT + 0200(中欧夏令时)
  • 2015年4月23日星期四15:02:00 GMT + 0200(中欧夏令时)

计算时差手册时,这是6:12:00。

但我的代码会在7:12:00返回。但我使用相同的计算方法(在excel中计算它也是6:12,使用相同的((B - A) + (D - C))方法)

编辑: 以下列方式调用函数get:

timeDiff("08:15","12:02","12:37","15:02"),日期如下:23/03/2015

然后转换为convertToDate:

convertToDate = function(date, time){
    var tempH = time.split(':');
    var tempDate = date.split('/');
    return new Date(tempDate[2], tempDate[1], tempDate[0], tempH[0], tempH[1], 0);
}

就是这样。

1 个答案:

答案 0 :(得分:2)

您的月份转换错误,您应该在0到11之间放置一个数字,因此如果您从互联网上取下它,则应减少1。如果您使用如下所示的UTC,强烈建议使用。

 convertToDate = function (date, time) {
    var tempH = time.split(':');
    var tempDate = date.split('/');
    var newDate = new Date(Date.UTC(tempDate[2], tempDate[1] - 1, tempDate[0], tempH[0], tempH[1], 0));
    return newDate;
}

timeDiff = function (date, time1, time2, time3, time4) {

    var dateVmS = convertToDate(date, time1);
    var dateVmE = convertToDate(date, time2);
    var dateNmS = convertToDate(date, time3);
    var dateNmE = convertToDate(date, time4);

    return new Date((dateVmE.getTime() - dateVmS.getTime()) + (dateNmE.getTime() - dateNmS.getTime()));
}

@Tom写了他的评论,在javaScript中你使用CEST而不是你正在使用CET的excel,这就是为什么差一小时。

为避免您使用世界时。

参考:

MDN- Date.UTC()