假設我有一個包含以下所有資料的陣列串列。
let events = {
["-1 19:00"],
["-1 20:00"],
["-1 17:00", "-1 23:00"],
["1 18:00"],
["2 18:00"],
["3 18:00"],
["4 18:00"],
["5 18:00"],
["6 18:00"],
["7 18:00"],
};
所以,這里 -1 代表每一天,就像每個“星期日,星期一”等等。-1 = 每天,1 = 星期一,2 = 星期二等等。
所以,我想計算從當前時間到最近一天的剩余時間,陣列中包含小時和分鐘。我真的不知道我應該怎么做。
getTimeLeftTillDay(dayname, time) :any {
let d = new Date();
let comming = parseInt(dayname);
if(comming === -1) {
comming = d.getDay();
}
const day = d.getDay();
const targetDay = comming; // Someday
let dayOffset = targetDay - day;
if (dayOffset < 0) dayOffset = 7;
d = new Date(d.getTime() (dayOffset * 24 * 3600 * 1000));
let timea = parseInt(time[0]);
let timeb = parseInt(time[1]);
d.setHours(timea);
d.setMinutes(timeb);
return d;
}
我嘗試使用上面的代碼,但它沒有按我預期的那樣作業。我真的很喜歡幫助!
uj5u.com熱心網友回復:
如果依賴第 3 方庫對您來說沒問題,我會使用眾多日期庫之一來執行計算。以下是使用date-fns 的方法:
import {addDays, formatDuration, intervalToDuration, setHours, setMinutes} from "date-fns";
const getTimeLeftTillDay = (dayName, time) => {
let daysToAdd = 0;
if (dayName !== '-1') {
daysToAdd = Number.parseInt(dayName);
}
const startDate = new Date();
let endDate = addDays(startDate, daysToAdd);
const [minutes, seconds] = time.split(":");
const hoursToSet = Number.parseInt(minutes);
endDate = setHours(endDate, hoursToSet)
const minutesToSet = Number.parseInt(seconds);
endDate = setMinutes(endDate, minutesToSet)
return customFormatDuration(startDate, endDate);
}
export const customFormatDuration = (start, end) => {
const durations = intervalToDuration({start, end})
return formatDuration(durations);
}
console.log(getTimeLeftTillDay("-1", "19:00"));
console.log(getTimeLeftTillDay("1", "02:00"));
console.log(getTimeLeftTillDay("7", "02:00"));
這會在我的機器上列印以下內容(在歐洲中部時間下午 2:25 執行):
4 hours 35 minutes
11 hours 35 minutes
6 days 21 hours 35 minutes
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344872.html
