我正在嘗試計算兩個不同日期和時間的總小時數和分鐘數:
下面是我的代碼:
let startShiftTime = moment(StartTime, ['DD-MM-YYYY h:mm:ss A'])
.utcOffset(0, false)
.format('DD-MM-YYYY hh:mm:ss A');
let endShiftTime = moment(EndTime, ['DD-MM-YYYY h:mm:ss A'])
.utcOffset(0, false)
.format('DD-MM-YYYY hh:mm:ss A');
var TotalSeconds = moment(startShiftTime, 'DD-MM-YYYY hh:mm:ss A')
.utcOffset(0, false)
.diff(
moment(endShiftTime, 'DD-MM-YYYY hh:mm:ss A').utcOffset(0, false),
'seconds',
);
var hours = Math.floor(TotalSeconds / 3600);
var minutes = Math.floor((TotalSeconds / 60) % 60);
console.log(
'startShiftTime: ',
startShiftTime,
' endShiftTime: ',
endShiftTime,
' hours: ',
hours,
' minutes: ',
minutes,
);
除了案例時差是 1 小時或其他情況外,我在所有情況下都得到了小時和分鐘
控制臺輸出:
startShiftTime: 02-12-2021 09:00:00 AM endShiftTime: 01-12-2021 09:30:00 PM hours: 11 minutes: 30
startShiftTime: 02-12-2021 04:30:00 PM endShiftTime: 02-12-2021 05:00:00 PM hours: -1 minutes: -30
在第二個輸出中看到......時差只有 30 分鐘......但在幾小時內我得到了 1
我無法理解我哪里出錯了
uj5u.com熱心網友回復:
您不需要自己進行這些計算,但可以使用moment.durationAPI:
const startShiftTime = moment('01-12-2021 09:00:00 AM', 'DD-MM-YYYY hh:mm:ss A');
const endShiftTime = moment('01-12-2021 09:30:00 AM', 'DD-MM-YYYY hh:mm:ss A');
const duration = moment.duration(startShiftTime.diff(endShiftTime));
console.log('as hours: ' duration.asHours(), 'as minutes: ' duration.asMinutes());
console.log('hours: ' duration.hours(), 'minutes: ' duration.minutes());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
PS:你得到負值是因為差異是在開始時間完成的,比結束時間小。如果你想要正值,那么你只需反轉差異:endShiftTime.diff(startShiftTime)
uj5u.com熱心網友回復:
為什么是startShiftTime和endShiftTime格式化的字串而不是moment. 您最終會在稍后再次決議它們。
您正在以錯誤的方式計算時間之間的差異。
endShiftTime
.diff(startShiftTime,'seconds')
這就引出了一個明顯的問題,為什么第一個例子計算正確......因為結束班次時間在開始時間之前,這沒有任何意義。
在第一個示例中交換開始時間和結束時間,然后在這兩種情況下都會得到正確的答案。
function calculate(StartTime, EndTime) {
let startShiftTime = moment(StartTime, ['DD-MM-YYYY h:mm:ss A'])
.utcOffset(0, false);
let endShiftTime = moment(EndTime, ['DD-MM-YYYY h:mm:ss A'])
.utcOffset(0, false);
var TotalSeconds = endShiftTime
.diff(startShiftTime,'seconds');
var hours = Math.floor(TotalSeconds / 3600);
var minutes = Math.floor((TotalSeconds / 60) % 60);
console.log(`startShiftTime: ${startShiftTime.format('DD-MM-YYYY h:mm:ss A')} endShiftTime: ${endShiftTime.format('DD-MM-YYYY h:mm:ss A')} hours: ${hours} minutes: ${minutes}`);
}
calculate('01-12-2021 09:30:00 PM', '02-12-2021 09:00:00 AM');
calculate('02-12-2021 04:30:00 PM', '02-12-2021 05:00:00 PM');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370504.html
標籤:javascript 反应原生 约会时间 瞬间
