【问题标题】:Time difference 1h off时差1小时关闭
【发布时间】:2015-03-23 14:08:18
【问题描述】:

我有以下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);
}

就是这样。

【问题讨论】:

  • 你能举个例子说明你是如何使用这个函数的(你传递了什么变量)谢谢。
  • 更新,提供更多信息
  • 我认为这与 3 月 29 日时间更改为中​​欧夏令时有关。您正在返回一个新日期,传递一个时间而不是日期,因此它使用的是您当前的时区(不是 CEDT)。
  • 关于如何解决这个问题的任何建议?
  • 您是否看到您输入了 23/03/2015 并且您得到的是 Apr 而不是一个月的 Mar?

标签: javascript


【解决方案1】:

您的月份转换错误,您应该输入一个介于 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,而不是在您的 excel 中您使用的是 CET,这就是为什么相差一小时。

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

参考:

MDN- Date.UTC()

【讨论】:

  • (x + offset) - (y + offset) = zz 相同,x - y = z
  • 非常感谢 :) 我通过 Jquery 从页面获取日期,因此我需要转换现有代码(您可以在第一篇文章中看到)。如果您有空闲时间...:D
  • @Shomz,你说得对,他的错误主要是由于月份转换错误,强烈建议使用UTC
  • @FrancescoE。 .getUTCTime(); 不起作用我得到:undefined is not a function
  • @Kiwi:你说得对,现在它应该可以工作了,你必须让它适应你的逻辑。
猜你喜欢
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2021-01-17
  • 2020-06-09
  • 2021-09-09
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
相关资源
最近更新 更多