如何用Moment给事件对象添加isToday属性:判断事件是否完全在今日
实现事件全时间段处于今日的判断
要给事件对象添加isToday布尔属性,仅当事件完整时间段都处于今日时设为true,可以通过Moment.js或原生JS Date对象实现,核心逻辑是验证事件起始时间不早于今日0点,且结束时间不晚于今日23:59:59。
方法一:使用Moment.js
// 你的事件对象 const event = { author: {id: 14738, first_name: "Test", last_name: "Test"}, departments_activities: [], start_at: "2022-10-11 13:00:00", end_at: "2022-10-11 13:18:00", id: 715437490, title: "test date 2" }; // 获取今日的起始和结束时间点 const todayStart = moment().startOf('day'); // 今日00:00:00 const todayEnd = moment().endOf('day'); // 今日23:59:59.999 // 添加isToday属性 event.isToday = moment(event.start_at).isSameOrAfter(todayStart) && moment(event.end_at).isSameOrBefore(todayEnd);
逻辑说明:
moment().startOf('day')和moment().endOf('day')分别获取今日的起始、结束时间戳isSameOrAfter判断事件开始时间不早于今日起始,isSameOrBefore判断事件结束时间不晚于今日结束- 两个条件同时满足时,
isToday才为true
方法二:使用原生JS Date对象(无需依赖库)
// 你的事件对象 const event = { author: {id: 14738, first_name: "Test", last_name: "Test"}, departments_activities: [], start_at: "2022-10-11 13:00:00", end_at: "2022-10-11 13:18:00", id: 715437490, title: "test date 2" }; // 构造今日的起始和结束时间 const today = new Date(); const todayStart = new Date(today.getFullYear(), today.getMonth(), today.getDate()); const todayEnd = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 23, 59, 59, 999); // 转换事件的起止时间为Date对象 const eventStart = new Date(event.start_at); const eventEnd = new Date(event.end_at); // 添加isToday属性 event.isToday = eventStart >= todayStart && eventEnd <= todayEnd;
逻辑说明:
- 通过
new Date(year, month, date)构造今日0点时间,new Date(year, month, date, 23,59,59,999)构造今日最后一刻时间 - 直接通过时间戳大小比较,判断事件起止时间是否完全落在今日区间内
内容的提问来源于stack exchange,提问作者jimbus
相关产品推荐
相关产品推荐

