Angular 日期时间计算给出了错误的结果
Angular date time calculations gives wrong result
嗨,我正在计算日期之间的时间
我的代码
$scope.startTime = new Date('0').setHours(7);
$scope.endTime = new Date('0').setHours(17);
$scope.breakTime = new Date('0').setMinutes(30);
this.tosum = function(startTime, endTime, breakTime) {
var timestamp1 = new Date(startTime).getTime();
var timestamp2 = new Date(endTime).getTime();
var timestamp3 = new Date(breakTime).getTime();
var diff = timestamp2 - timestamp1 - timestamp3;
var newDate = new Date('0');
newDate.setMilliseconds(diff);
return newDate;
};
它适用于时间戳 1 和 2,但是当我添加时间戳 3 时,我得到了错误的结果。:/
我想获取 startTime 和 endTime 之间的时间 - breakTime
var diff = timestamp2 - timestamp1
应该给出 10:00,但是当添加 -timestamp1
时,它给出 10:30 而不是应该的 9:30 :/
如果我添加 + timestamp3;
而不是 - 我应该得到 9:30,但是如果增加一小时休息时间,那么休息时间是 1 小时 30 分钟,我得到 10:30 和休息时间 2 小时 30 分钟结果 11:30 等一个 :/ 但应该是 8:30 和 7:30 我该如何更正这个?
你能试试下面吗:
var diff = timestamp2 - (timestamp1 + timestamp3);
我认为这是因为您没有考虑到对 Epoch 的引用(2000 年:您使用使用解析器解析的字符串 0
)。在纯 JS 中(你可以将其翻译成 angular)。
function tosum(startTime, endTime, breakTime) {
var reference = new Date('0'),
timestamp1 = new Date(startTime).getTime() - reference.getTime(),
timestamp2 = new Date(endTime).getTime() - reference.getTime(),
timestamp3 = new Date(breakTime).getTime() - reference.getTime(),
diff = timestamp2 - timestamp1 - timestamp3,
newDate = new Date('0');
newDate.setTime(diff);
return newDate;
}
var startTime = new Date('0').setHours(7),
endTime = new Date('0').setHours(17),
breakTime = new Date('0').setMinutes(30);
document.body.textContent = tosum(startTime, endTime, breakTime).toISOString().split(/[T\.]/g)[1];
如果您使用了 unix 纪元(通过使用自纪元以来的毫秒数 0),那么您就没有问题。
function tosum(startTime, endTime, breakTime) {
var timestamp1 = new Date(startTime).getTime(),
timestamp2 = new Date(endTime).getTime(),
timestamp3 = new Date(breakTime).getTime(),
diff = timestamp2 - timestamp1 - timestamp3,
newDate = new Date(0);
newDate.setTime(diff);
return newDate;
}
var startTime = new Date(0).setHours(7),
endTime = new Date(0).setHours(17),
breakTime = new Date(0).setMinutes(30);
document.body.textContent = tosum(startTime, endTime, breakTime).toISOString().split(/[T\.]/g)[1];
使用 console
并记录一些您的值会向您展示这一点。
嗨,我正在计算日期之间的时间 我的代码
$scope.startTime = new Date('0').setHours(7);
$scope.endTime = new Date('0').setHours(17);
$scope.breakTime = new Date('0').setMinutes(30);
this.tosum = function(startTime, endTime, breakTime) {
var timestamp1 = new Date(startTime).getTime();
var timestamp2 = new Date(endTime).getTime();
var timestamp3 = new Date(breakTime).getTime();
var diff = timestamp2 - timestamp1 - timestamp3;
var newDate = new Date('0');
newDate.setMilliseconds(diff);
return newDate;
};
它适用于时间戳 1 和 2,但是当我添加时间戳 3 时,我得到了错误的结果。:/
我想获取 startTime 和 endTime 之间的时间 - breakTime
var diff = timestamp2 - timestamp1
应该给出 10:00,但是当添加 -timestamp1
时,它给出 10:30 而不是应该的 9:30 :/
如果我添加 + timestamp3;
而不是 - 我应该得到 9:30,但是如果增加一小时休息时间,那么休息时间是 1 小时 30 分钟,我得到 10:30 和休息时间 2 小时 30 分钟结果 11:30 等一个 :/ 但应该是 8:30 和 7:30 我该如何更正这个?
你能试试下面吗:
var diff = timestamp2 - (timestamp1 + timestamp3);
我认为这是因为您没有考虑到对 Epoch 的引用(2000 年:您使用使用解析器解析的字符串 0
)。在纯 JS 中(你可以将其翻译成 angular)。
function tosum(startTime, endTime, breakTime) {
var reference = new Date('0'),
timestamp1 = new Date(startTime).getTime() - reference.getTime(),
timestamp2 = new Date(endTime).getTime() - reference.getTime(),
timestamp3 = new Date(breakTime).getTime() - reference.getTime(),
diff = timestamp2 - timestamp1 - timestamp3,
newDate = new Date('0');
newDate.setTime(diff);
return newDate;
}
var startTime = new Date('0').setHours(7),
endTime = new Date('0').setHours(17),
breakTime = new Date('0').setMinutes(30);
document.body.textContent = tosum(startTime, endTime, breakTime).toISOString().split(/[T\.]/g)[1];
如果您使用了 unix 纪元(通过使用自纪元以来的毫秒数 0),那么您就没有问题。
function tosum(startTime, endTime, breakTime) {
var timestamp1 = new Date(startTime).getTime(),
timestamp2 = new Date(endTime).getTime(),
timestamp3 = new Date(breakTime).getTime(),
diff = timestamp2 - timestamp1 - timestamp3,
newDate = new Date(0);
newDate.setTime(diff);
return newDate;
}
var startTime = new Date(0).setHours(7),
endTime = new Date(0).setHours(17),
breakTime = new Date(0).setMinutes(30);
document.body.textContent = tosum(startTime, endTime, breakTime).toISOString().split(/[T\.]/g)[1];
使用 console
并记录一些您的值会向您展示这一点。