如何使用 Moment.js 获取特定 previous/last 时间的时间戳?
How to get the timestamp of a specific previous/last time with Moment.js?
下面给出了当前日期时间的时间戳:
来源
moment().utc().valueOf()
输出
1626964579209 // 2021-07-22T14:36:19Z
如何获取 previous/last 07:00 AM (2021-07-22T07:00:00Z) 和 11:00 PM (2021-07-21T23:00:00Z) 日期时间?
请注意,在这种情况下,last/previous 11:00 下午时间戳来自前一天 (2021-07-21)。
我试过 Moment.js Durations and Subtract Time 但没有成功。
这里有一个 StackBlitz 游戏:https://stackblitz.com/edit/typescript-ofcrjs
提前致谢!
你是这个意思吗?
moment('7:00 AM', 'h:mm A').subtract(1,'days').utc().valueOf();
moment('11:00 PM', 'hh:mm A').subtract(1,'days').utc().valueOf();
只需获取今天的时间并将日减 1。
你可以
const currentDateTime = moment().utc();
console.log('Current date-time timestamp:', currentDateTime.valueOf());
console.log('Current date-time string:', currentDateTime.format());
// If the current date-time string is 2021-07-22T14:36:19Z
// then the previous/last 07:00 AM string is 2021-07-22T07:00:00Z and the
// previous/last 11:00 PM string is 2021-07-21T23:00:00Z (previous day)
let last7amTimestamp = currentDateTime.clone().startOf('d').add(7, 'h'); // ???
if (last7amTimestamp.isAfter(currentDateTime)) {
last7amTimestamp.subtract(1, 'd')
}
let last11pmTimestamp = currentDateTime.clone().startOf('d').add(23, 'h'); // ???
if (last11pmTimestamp.isAfter(currentDateTime)) {
last11pmTimestamp.subtract(1, 'd')
}
console.log('Previous/last 07:00 AM timestamp:', last7amTimestamp);
console.log('Previous/last 11:00 PM timestamp:', last11pmTimestamp);
您可以测试当前的UTC时间,如果在要求的时间之后,只需将UTC时间设置为时间即可。如果是之前,设置为前一天的小时,即小时 - 24.
例如给定提供的日期或默认为当前日期而没有 moment.js 的情况下获取前一个指定小时 UTC 的一般函数是:
// Get the previous hour UTC given a Date
// Default date is current date
function previousUTCHour(h, d = new Date()) {
// Copy d so don't affect original
d = new Date(+d);
return d.setUTCHours(d.getUTCHours() < h ? h - 24 : h, 0, 0, 0);
}
// Example
let d = new Date();
console.log('Currently : ' + d.toISOString());
[1, 7, 11, 18, 23].forEach(
h => console.log('Previous ' + (''+h).padStart(2, '0') +
' ' + new Date(previousUTCHour(h)).toISOString())
);
下面给出了当前日期时间的时间戳:
来源
moment().utc().valueOf()
输出
1626964579209 // 2021-07-22T14:36:19Z
如何获取 previous/last 07:00 AM (2021-07-22T07:00:00Z) 和 11:00 PM (2021-07-21T23:00:00Z) 日期时间?
请注意,在这种情况下,last/previous 11:00 下午时间戳来自前一天 (2021-07-21)。
我试过 Moment.js Durations and Subtract Time 但没有成功。
这里有一个 StackBlitz 游戏:https://stackblitz.com/edit/typescript-ofcrjs
提前致谢!
你是这个意思吗?
moment('7:00 AM', 'h:mm A').subtract(1,'days').utc().valueOf();
moment('11:00 PM', 'hh:mm A').subtract(1,'days').utc().valueOf();
只需获取今天的时间并将日减 1。
你可以
const currentDateTime = moment().utc();
console.log('Current date-time timestamp:', currentDateTime.valueOf());
console.log('Current date-time string:', currentDateTime.format());
// If the current date-time string is 2021-07-22T14:36:19Z
// then the previous/last 07:00 AM string is 2021-07-22T07:00:00Z and the
// previous/last 11:00 PM string is 2021-07-21T23:00:00Z (previous day)
let last7amTimestamp = currentDateTime.clone().startOf('d').add(7, 'h'); // ???
if (last7amTimestamp.isAfter(currentDateTime)) {
last7amTimestamp.subtract(1, 'd')
}
let last11pmTimestamp = currentDateTime.clone().startOf('d').add(23, 'h'); // ???
if (last11pmTimestamp.isAfter(currentDateTime)) {
last11pmTimestamp.subtract(1, 'd')
}
console.log('Previous/last 07:00 AM timestamp:', last7amTimestamp);
console.log('Previous/last 11:00 PM timestamp:', last11pmTimestamp);
您可以测试当前的UTC时间,如果在要求的时间之后,只需将UTC时间设置为时间即可。如果是之前,设置为前一天的小时,即小时 - 24.
例如给定提供的日期或默认为当前日期而没有 moment.js 的情况下获取前一个指定小时 UTC 的一般函数是:
// Get the previous hour UTC given a Date
// Default date is current date
function previousUTCHour(h, d = new Date()) {
// Copy d so don't affect original
d = new Date(+d);
return d.setUTCHours(d.getUTCHours() < h ? h - 24 : h, 0, 0, 0);
}
// Example
let d = new Date();
console.log('Currently : ' + d.toISOString());
[1, 7, 11, 18, 23].forEach(
h => console.log('Previous ' + (''+h).padStart(2, '0') +
' ' + new Date(previousUTCHour(h)).toISOString())
);