我有以下自定义 JavaScript 函数来获取以天/小时/分钟为单位的持续时间 -
daysFromNow(time) {
let oldThreshold = <number>Moment.relativeTimeThreshold('d');
try {
Moment.relativeTimeThreshold('m', 60);
Moment.relativeTimeThreshold('h', 24);
Moment.relativeTimeThreshold('d', 999999);
return Moment(time).fromNow();
} finally {
Moment.relativeTimeThreshold('d', oldThreshold);
}
}
现在
console.log(daysFromNow('2024-01-11T23:59:59.000+10:30')); // gives 'in 29 days'
console.log(daysFromNow('2024-01-12T23:59:59.000+10:30')); // gives 'in 30 days'
console.log(daysFromNow('2024-01-13T23:59:59.000+10:30')); // gives 'in 30 days', should be 31
console.log(daysFromNow('2024-01-14T15:10:59.000+10:30')) // gives 'in 31 days' - should be 32
不知道我哪里做错了。这与时区有关吗?
startOf()
方法将时间标准化为一天的开始时间,然后比较差异。
function daysFromNow(time) {
let oldThreshold = moment.relativeTimeThreshold("d");
try {
moment.relativeTimeThreshold("m", 60);
moment.relativeTimeThreshold("h", 24);
moment.relativeTimeThreshold("d", 999999);
let currentTime = moment().startOf("day");
let inputTime = moment(time).startOf("day");
// ensures that the difference between the two times is calculated in whole days.
return moment.duration(inputTime.diff(currentTime)).humanize(true);
} finally {
moment.relativeTimeThreshold("d", oldThreshold);
}
}
console.log(daysFromNow("2024-01-11T23:59:59.000+10:30"));
console.log(daysFromNow("2024-01-12T23:59:59.000+10:30"));
console.log(daysFromNow("2024-01-13T23:59:59.000+10:30"));
console.log(daysFromNow("2024-01-14T15:10:59.000+10:30"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>