我有以下 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 ,这就是相差一小时的原因。
为避免这种情况,您应该使用世界时。
引用:
关于javascript - 时差1小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29212380/