繁体   English   中英

如何确定 Javascript 中的日期是否为下周?

[英]How to determine if a Date is next week in Javascript?

什么是确定某个日期是否的快速方法:

  • 是下周
  • 是上周
  • 是本周
  • ETC

如果其中任何一个具有内置方法,我愿意使用 Date、Moment、Date-fns 或 Dayjs。

截至目前,我正在考虑使用getDay()并比较日期是不是太早了,也不是太接近今天。

谢谢,

此示例假设您将“下周”定义为“未来 7-14 天”,但您可以调整此答案以做任何您想做的事情。 此答案旨在帮助了解如何对 javascript 日期执行此类操作,而不仅仅是此操作。

选项 1 :通过从目标日期中减去当前日期来确定目标日期和当前日期之间的天数

// store current date as "today"
var today = new Date();

// store 8 days from today as "later"
later = new Date();
later.setDate(later.getDate() + 8);

// Determine how many days are between the two dates by subtracting "today" from "later" and converting milliseconds to days
days = (later - today) / (1000 * 3600 * 24);

// Is "later" 7-14 days away?
console.log(days > 7 && days < 14); // true

选项 2 :存储开始和结束日期并将其与我们的目标日期进行比较

// store 8 days from today as "later"
later = new Date();
later.setDate(later.getDate() + 8);

// Store the start date
start = new Date(); 
start.setDate(start.getDate() + 7); 

// Store the end date
end = new Date(); 
end.setDate(end.getDate() + 14); 

// is "later" between the start and end date?
console.log(later > start && later < end); // true

一种算法是将两个日期都取回一周的开始,然后得到两者之间的周数,例如

 // Get start of week (previous or current Monday) function getWeekStart(d = new Date()) { return new Date(d.getFullYear(), d.getMonth(), d.getDate() - (d.getDay() || 7) + 1); } // Get relative weeks difference function getRelativeWeek(d = new Date()) { let thisWeek = getWeekStart(); let targetWeek = getWeekStart(d); let diffWeeks = Math.round((targetWeek - thisWeek) / (8.64e7*7)); // Convert to words switch (true) { case (diffWeeks < -1): return Math.abs(diffWeeks) + ' weeks ago'; case (diffWeeks == -1): return 'last week'; case (diffWeeks == 0): return 'this week'; case (diffWeeks == 1): return 'next week'; case (diffWeeks > 1): return diffWeeks + ' weeks away'; default: return 'dunno'; } } // Examples let d = new Date(); // Current week [new Date(+d - 25*8.64e7), new Date(+d - 7*8.64e7), d, new Date(+d + 7*8.64e7), new Date(+d + 25*8.64e7), new Date(NaN) ].forEach(d => console.log( d.toDateString() + ': ' + getRelativeWeek(d) ));

请注意,8.64e7*7 大约是一周中的毫秒数。 根据星期是否有夏令时边界,可能为±3.6e6,这将导致除法后的结果为非整数。 四舍五入解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM