momentjs获取时差
momentjs get time difference
我正在尝试获取用户在带有 moment.js 的页面上花费的时间,但它 return 的值是错误的。
代码:
dateStart: any;
ngOnInit() {
this.dateStart = moment(); // current time
}
// when user post data before being redirect
moment(moment(this.dateStart).diff(moment())).format("hh:mm:ss");
上面的代码应该 return,例如 00:00:04
,这意味着用户在该页面中 4 seconds
。但我得到了这样的东西 06:59:55
有什么想法吗?
我怀疑您将 4 秒后的日期格式化为 1970 年 1 月 1 日,并根据您的时区偏移量进行了调整。您要查找 duration,而不是日期。
为什么要格式化它?为什么不只记录原始持续时间?你不需要时刻减去一个时间戳
从另一个。 Date.now() 将为您提供当前时间戳:
this.startDate = Date.now();
// ...a few moments later...
const duration = Date.now() - this.startDate; // number of ms between then and now
您可以先尝试转换为 UTC。
moment.utc(moment().diff(this.dateStart)).format("HH:mm:ss.SSS"); //include milliseconds
let start = moment();
setTimeout(() => {
const duration = moment.utc(moment().diff(start));
console.log(duration.format("HH:mm:ss.SSS"));
}, 1500);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.0/moment.min.js"></script>
如果你只想要秒数(diff)为什么不使用带有测量参数的 momentjs 的 diff 函数(支持的是 years
、months
、weeks
, days
, hours
, minutes
, 和 seconds
默认为毫秒。)
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1
let dateStart = moment([2020, 9, 2, 12, 0, 0, 125]);
let futureTime = moment();
let secondsAgo = (futureTime.diff(dateStart, 'seconds') % 60);
let minutesAgo = (futureTime.diff(dateStart, 'minutes') % 60);
let hoursAgo = futureTime.diff(dateStart, 'hours');
console.log('hour: ' + hoursAgo + ', minute: ' + minutesAgo + ', seconds: ' + secondsAgo)
let hms = moment({
hour: hoursAgo,
minute: minutesAgo,
seconds: secondsAgo
});
console.log(hms.format('HH:mm:ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.0/moment.min.js"></script>
plotly.js 中没有函数 return 作为新的 plotly 对象的区别。我认为这样做的唯一方法是获取以秒为单位的时差,然后计算分钟和小时。
以下应该有效。 return时差为String
。所以秒和分钟总是在 0 到 60 之间,小时大于 0。74:12:40
的结果意味着用户在该页面上停留了 74 小时 12 分 40 秒。
function runTest() {
let startDate = moment('02.10.2020 8:00:00', 'DD.MM.YYYY HH:mm:ss');
let endDate = moment('03.10.2020 10:24:38', 'DD.MM.YYYY HH:mm:ss');
getDifferenceTime(startDate, endDate);
}
function getDifferenceTime(startDate, endDate) {
// Get time difference in seconds
let seconds = endDate.diff(startDate, 'seconds');
let minutes = 0;
let hours = 0;
// Calculate number of minutes
if (seconds >= 60) {
minutes = Math.floor(seconds / 60);
seconds -= minutes * 60;
}
// Calculate number of hours
if (minutes >= 60) {
hours = Math.floor(minutes / 60);
minutes -= hours * 60;
}
let timeString = hours + ':' + minutes + ':' + seconds;
console.log(timeString);
return timeString;
}
您可以使用上面截取的代码进行测试。它应该 return 26:24:38
,这是您的预期输出。
我正在尝试获取用户在带有 moment.js 的页面上花费的时间,但它 return 的值是错误的。
代码:
dateStart: any;
ngOnInit() {
this.dateStart = moment(); // current time
}
// when user post data before being redirect
moment(moment(this.dateStart).diff(moment())).format("hh:mm:ss");
上面的代码应该 return,例如 00:00:04
,这意味着用户在该页面中 4 seconds
。但我得到了这样的东西 06:59:55
有什么想法吗?
我怀疑您将 4 秒后的日期格式化为 1970 年 1 月 1 日,并根据您的时区偏移量进行了调整。您要查找 duration,而不是日期。
为什么要格式化它?为什么不只记录原始持续时间?你不需要时刻减去一个时间戳 从另一个。 Date.now() 将为您提供当前时间戳:
this.startDate = Date.now();
// ...a few moments later...
const duration = Date.now() - this.startDate; // number of ms between then and now
您可以先尝试转换为 UTC。
moment.utc(moment().diff(this.dateStart)).format("HH:mm:ss.SSS"); //include milliseconds
let start = moment();
setTimeout(() => {
const duration = moment.utc(moment().diff(start));
console.log(duration.format("HH:mm:ss.SSS"));
}, 1500);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.0/moment.min.js"></script>
如果你只想要秒数(diff)为什么不使用带有测量参数的 momentjs 的 diff 函数(支持的是 years
、months
、weeks
, days
, hours
, minutes
, 和 seconds
默认为毫秒。)
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1
let dateStart = moment([2020, 9, 2, 12, 0, 0, 125]);
let futureTime = moment();
let secondsAgo = (futureTime.diff(dateStart, 'seconds') % 60);
let minutesAgo = (futureTime.diff(dateStart, 'minutes') % 60);
let hoursAgo = futureTime.diff(dateStart, 'hours');
console.log('hour: ' + hoursAgo + ', minute: ' + minutesAgo + ', seconds: ' + secondsAgo)
let hms = moment({
hour: hoursAgo,
minute: minutesAgo,
seconds: secondsAgo
});
console.log(hms.format('HH:mm:ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.0/moment.min.js"></script>
plotly.js 中没有函数 return 作为新的 plotly 对象的区别。我认为这样做的唯一方法是获取以秒为单位的时差,然后计算分钟和小时。
以下应该有效。 return时差为String
。所以秒和分钟总是在 0 到 60 之间,小时大于 0。74:12:40
的结果意味着用户在该页面上停留了 74 小时 12 分 40 秒。
function runTest() {
let startDate = moment('02.10.2020 8:00:00', 'DD.MM.YYYY HH:mm:ss');
let endDate = moment('03.10.2020 10:24:38', 'DD.MM.YYYY HH:mm:ss');
getDifferenceTime(startDate, endDate);
}
function getDifferenceTime(startDate, endDate) {
// Get time difference in seconds
let seconds = endDate.diff(startDate, 'seconds');
let minutes = 0;
let hours = 0;
// Calculate number of minutes
if (seconds >= 60) {
minutes = Math.floor(seconds / 60);
seconds -= minutes * 60;
}
// Calculate number of hours
if (minutes >= 60) {
hours = Math.floor(minutes / 60);
minutes -= hours * 60;
}
let timeString = hours + ':' + minutes + ':' + seconds;
console.log(timeString);
return timeString;
}
您可以使用上面截取的代码进行测试。它应该 return 26:24:38
,这是您的预期输出。