我正在制作一個從 speedrun.com API 獲取資料的站點,并按時間順序在站點上放置最新的運行。我最近添加了一個功能,從網站被查看的同一天開始運行將有一個特殊的圖示,顯示它們是“新的”。這是我目前的解決方案(Javascript):
runs[i].date = "2021-12-12"; // The API does not return hours
if (new Date(new Date().getTime() - new Date().getTimezoneOffset() * 60000).toJSON().slice(0, 10) === runs[i].date) {
alert("Today");
}
如果日期是 2021 年 12 月 12 日,則會發出警報Today。
此解決方案考慮了時區差異并且運行良好。但是,我希望這對于過去 3 天內發生的運行是可能的,因此即使runs[i].date = "2021-12-11"(12 月 10 日) 或runs[i].date = "2021-12-11"(12 月 11 日),它仍然會 alert Today。
這將如何完成?
uj5u.com熱心網友回復:
將其拆分為函式并組合它們:
const DAY = 1000 * 60 * 60 * 24;
function datesAreInRange (date1, date2, days) {
const ms = days * DAY;
const diff = Math.abs(date2.getTime() - date1.getTime());
return diff <= ms;
}
function getDateFromString (ymd) {
const [y, m, d] = ymd.split('-').map(str => parseInt(str, 10));
return new Date(y, m - 1, d);
}
const today = '2021-12-16';
const otherDates = [
'2021-12-20',
'2021-12-19',
'2021-12-18',
'2021-12-17',
'2021-12-16',
'2021-12-15',
'2021-12-14',
'2021-12-13',
'2021-12-12',
];
for (const other of otherDates) {
const inRange = datesAreInRange(...[today, other].map(getDateFromString), 3);
console.log(`${other} is ${inRange ? '' : 'not '}in range.`)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383576.html
標籤:javascript 日期
