Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 时差1小时_Javascript - Fatal编程技术网

Javascript 时差1小时

Javascript 时差1小时,javascript,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(dat

我有以下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 get:

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。如果您使用如下所述的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中,您使用的是,而在excel中,您使用的是,这就是为什么相差一小时的原因

为了避免这种情况,你应该使用世界时

参考:


你能举个例子说明你是如何使用函数的(你传递的是什么变量)吗?谢谢。更新了,有了更多的信息,我想这与3月29日中欧夏令时的时间变化有关。您返回的是一个新日期,传递的是时间而不是日期,因此它使用的是您当前的时区(不是CEDT)。有什么建议吗?您是否看到您输入了
23/03/2015
,并且月份是Apr而不是Mar?
(x+offset)-(y+offset)=z
这与使用
x-y=z
得到的结果相同,非常感谢:)我通过Jquery从页面获取日期,因此我需要转换现有代码(您可以在第一篇文章中看到)。如果你有空余时间…:D@Shomz,您肯定是对的,他的错误主要是由于错误的月份转换,而且UTC非常稳定recommended@FrancescoE.
.getUTCTime()
不起作用我明白了:
未定义不是一个函数
@Kiwi:你说得对,现在它应该起作用了,你必须使它适应你的逻辑。