如何在时间戳(GMT)中获取今天的开始时间(00:00:00)和结束时间(23:59:59)?计算机使用本地时间。
如何在时间戳(GMT)中获取今天的开始时间(00:00:00)和结束时间(23:59:59)?计算机使用本地时间。
var start = new Date();
start.setUTCHours(0,0,0,0);
var end = new Date();
end.setUTCHours(23,59,59,999);
alert( start.toUTCString() + ':' + end.toUTCString() );
如果您需要从这些时间获取UTC时间,可以使用UTC()
。
使用dayjs库,按照以下方式使用startOf
和endOf
方法:
本地GMT:
const start = dayjs().startOf('day'); // set to 12:00 am today
const end = dayjs().endOf('day'); // set to 23:59 pm today
const utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
const start = dayjs.utc().startOf('day');
const end = dayjs.utc().endOf('day');
使用已经废弃的momentjs库,可以通过在当前日期对象上使用 startOf()
和 endOf()
方法,并将字符串'day'
作为参数传递来实现这一目标:
本地 GMT:
var start = moment().startOf('day'); // set to 12:00 am today
var end = moment().endOf('day'); // set to 23:59 pm today
var start = moment.utc().startOf('day');
var end = moment.utc().endOf('day');
.toDate()
来获取日期。var end = moment().endOf('day').toDate();
- YaTaras.unix()
可以获得以秒为单位的Unix时间戳 :) 就像这样:moment().startOf('day').unix()
- Lukas Liesismoment(new Date()).endOf("day");
无法工作,但是 moment().endOf("day");
可以工作。 - B. Kemmermoment-timezone
,并执行以下操作:moment().tz('America/Chicago').startOf('day').toDate()
。 - Chad Johnsonvar DateTime = luxon.DateTime;
DateTime.local().startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z
DateTime.local().endOf('day').toUTC().toISO(); //2017-11-17T18:29:59.999Z
DateTime.fromISO(new Date().toISOString()).startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z
如果您只需要本地时间,请删除 .toUTC()
FYI(Tvanfosson版本的合并版)
它会返回实际日期 => 当你调用函数时的日期
export const today = {
iso: {
start: () => new Date(new Date().setHours(0, 0, 0, 0)).toISOString(),
now: () => new Date().toISOString(),
end: () => new Date(new Date().setHours(23, 59, 59, 999)).toISOString()
},
local: {
start: () => new Date(new Date(new Date().setHours(0, 0, 0, 0)).toString().split('GMT')[0] + ' UTC').toISOString(),
now: () => new Date(new Date().toString().split('GMT')[0] + ' UTC').toISOString(),
end: () => new Date(new Date(new Date().setHours(23, 59, 59, 999)).toString().split('GMT')[0] + ' UTC').toISOString()
}
}
// 使用方法
today.local.now(); //"2018-09-07T01:48:48.000Z" BAKU +04:00
today.iso.now(); // "2018-09-06T21:49:00.304Z" *
*这适用于Java8上的Instant时间类型,它会根据您所在的区域自动转换您的本地时间。(如果您计划编写全球应用程序)
一句话总结 - 考虑本地时区并且不使用库
const todayStart = new Date(new Date().setHours(0, 0, 0, 0))
const todayEnd = new Date(new Date().setHours(23, 59, 59, 999))
const tomorrowStart = new Date(new Date(new Date().setHours(0, 0, 0, 0)).setDate(new Date().getDate() + 1))
const tomorrowEnd = new Date(new Date(new Date().setHours(23, 59, 59, 999)).setDate(new Date().getDate() + 1))
const monthStart = new Date(new Date(new Date().getFullYear(), new Date().getMonth(), 1).setHours(0, 0, 0, 0))
const monthEnd = new Date(new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0).setHours(23, 59, 59, 999))
const nextMonthStart = new Date(new Date(new Date().getFullYear(), new Date().getMonth() + 1, 1).setHours(0, 0, 0, 0))
const nextMonthEnd = new Date(new Date(new Date().getFullYear(), new Date().getMonth() + 2, 0).setHours(23, 59, 59, 999))
console.log({
todayStart,
todayEnd,
tomorrowStart,
tomorrowEnd,
monthStart,
monthEnd,
nextMonthStart,
nextMonthEnd,
})
在 MomentJs 中,我们可以这样声明:
const start = moment().format('YYYY-MM-DD 00:00:01');
const end = moment().format('YYYY-MM-DD 23:59:59');
如果你只对 GMT 时间戳感兴趣,你也可以这样做,这样可以方便地适应不同的时间间隔(1小时:1000 * 60 * 60
,12小时:1000 * 60 * 60 * 12
,等等)。
const interval = 1000 * 60 * 60 * 24; // 24 hours in milliseconds
let startOfDay = Math.floor(Date.now() / interval) * interval;
let endOfDay = startOfDay + interval - 1; // 23:59:59:9999
如果你对UTC一天的开始/结束时间感兴趣,你也可以使用取模运算符:
const now = new Date().getTime();
let startOfDay = now - (now % 86400000);
let endDate = startOfDay + 86400000;
这里的86400表示一天的秒数,结果变量的单位为毫秒。
如果您更喜欢使用Date
对象:
const now = new Date().getTime();
let startOfDay = new Date(now - (now % 86400000));
let endDate = new Date(now - (now % 86400000) + 86400000);
let endDate = startOfDay + 86400000 - 1
来获取当前一天的最后一毫秒。 - Josh M.我更喜欢使用date-fns库来操作日期。它是一个非常棒的模块化和一致性工具。你可以这样获取一天的开始和结束:
var startOfDay = dateFns.startOfDay;
var endOfDay = dateFns.endOfDay;
console.log('start of day ==> ', startOfDay(new Date('2015-11-11')));
console.log('end of day ==> ', endOfDay(new Date('2015-11-11')));
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>
基于最受欢迎的答案,仅用一行定义日期:
const startToday = new Date(new Date().setUTCHours(0,0,0,0));
const endToday = new Date(new Date().setUTCHours(23,59,59,999));
说明:
new Date().setUTCHours(0,0,0,0) // returns the epoch time number
new Date(/* epoch number */) // returns that epoch Date object
new Date
构造函数。
var end = new Date(start.getTime());
,以确保你在同一时间点上 - 如果你在初始化开始和结束日期之间更改了日期,则可能会发生这种情况 - 这只是一个良好的习惯。请注意,我的翻译保留了原文的意思,并尽力让内容更通俗易懂,但没有加入额外的解释。 - Martyn DavissetUTCHours
而非setHours
来获取世界标准时间。 - sidonaldsonsetHours
是危险的,因为它设置的是本地时间而不是 UTC 时间。 - Michael