javascript - 时差1小时

标签 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);
}

就是这样。

最佳答案

您的月份转换错误,您应该输入 0 到 11 之间的数字,因此如果您从互联网上获取它,则应减去 1。 Then 强烈建议您使用 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相反,在您的 Excel 中,您使用的是 CET ,这就是相差一小时的原因。

为避免这种情况,您应该使用世界时。

引用:

MDN- Date.UTC()

关于javascript - 时差1小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29212380/

相关文章:

javascript - 在特定视口(viewport)宽度以下禁用事件处理程序

javascript - 声音不是使用react-native-sound来播放的

javascript - 在不使用 "new"实例化函数对象的情况下访问原型(prototype)属性

javascript - 如何创建仅以字符串中的第一个字母或空格后开始的任何其他字母开头的自动完成功能

javascript - Bootstrap 4.5.2 bug/更新 popper.js 过时的新方法是 popperjs/core

javascript - imacros firefox循环遍历结果并提取

Javascript - 根据存在于单独数组中的键值过滤对象数组

javascript - window.localStorage 上的原子操作

javascript - Cordova 地理定位插件不适用于 android

javascript - 如何将 css 添加到 Jquery 中的 .after 函数