4 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個贊
只需比較字符串即可
var shiftStartTime = "05:48"; var shiftEndTime = "14:29";
shiftStartTime > shiftEndTime // false

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個贊
好的,所以您得到了格式為字符串的三個相對時(shí)間HH:mm。我假設(shè)您的時(shí)間以 24 小時(shí)字符串/軍事時(shí)間形式給出,因?yàn)榉駝t,您需要 AM / PM 說明符。
將您正在使用的數(shù)據(jù)采用適合機(jī)器可讀的格式總是很有用的,因此您可以將它們解析為將小時(shí)和分鐘作為數(shù)字保存的簡單對象。
執(zhí)行此操作的函數(shù)可能如下所示。
function parseTimeStr(time) {
// The pattern of your input,
// allows spaces around the `:`
// and single-digit inputs like `8:00`
let re = /([0-9][0-9]?)\s*:\s*([0-9][0-9]?)/;
let result = re.exec(time.trim());
if (result === null) {
throw "No match"
}
let hour = parseInt(result[1], 10);
let minute = parseInt(result[2], 10);
/* handle out of range values here */
return { hour, minute };
}
好的,現(xiàn)在你已經(jīng)有了這些對象了。你如何比較它們?有一個模式:讓一個函數(shù)返回第一個參數(shù)是否大于 (1)、等于 (0) 還是小于 (-1) 第二個參數(shù)。
既然時(shí)間是一個對象,那么寫這個就很簡單了:
function cmpDate(date1, date2) {
if (date1.hour > date2.hour) {
return 1;
} else if (date1.hour < date2.hour) {
return -1;
} else if (date1.minute > date2.minute) {
return 1;
} else if (date1.minute < date2.minute) {
return -1;
} else {
return 0;
}
}
好吧,現(xiàn)在我們可以有一個輔助函數(shù)來檢查第一個參數(shù)是否位于最后兩個參數(shù)定義的閉區(qū)間內(nèi):
function isInShift(time, shiftStart, shiftEnd) {
// time is greater or equal shiftStart
// and less or equal shiftEnd
return cmpDate(time, shiftStart) !== -1 && cmpDate(time, shiftEnd) !== 1;
}
然后您最終可以通過調(diào)用進(jìn)行比較isInShift(parseTimeStr(selectedTime), parseTimeStr(shiftStartTime), parseTimeStr(shiftEndTime))。這將返回一個布爾值。您可以輕松擴(kuò)展此基礎(chǔ)架構(gòu)以實(shí)現(xiàn)多個輪班。
請注意,現(xiàn)實(shí)和您的用戶都可能比您想象的更……扭曲。上面的代碼沒有對無效時(shí)間輸入進(jìn)行錯誤處理,也沒有考慮夜班,但這些都是你可以輕松計(jì)算出來的細(xì)節(jié),你只需要花點(diǎn)功夫去思考它們。

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個贊
const date = new Date();
const shiftStartTime = '05:48';
const shiftEndTime = '14:29';
const selectedDate = '14:20';
const start = date.setHours(+shiftStartTime.split(':')[0], +shiftStartTime.split(':')[1], 0, 0);
const end = date.setHours(+shiftEndTime.split(':')[0], +shiftEndTime.split(':')[1], 0, 0);
const selected = date.setHours(+selectedDate.split(':')[0], +selectedDate.split(':')[1], 0, 0);
if (start < selected && selected < end) {
console.log(true);
} else {
console.log(false);
}

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個贊
這里有一些 JS 可以做到這一點(diǎn),盡管更好的格式時(shí)間會讓它變得更容易
function findTotalTime(time) {
hours = parseInt(time.substring(0,2))
mins = parseInt(time.substring(3,5))
return (hours*60) + mins
}
startTime = findTotalTime(shiftStartTime)
endTime = findTotalTime(shiftEndTime)
selectedTime = findTotalTime(selectedDate)
if (selectedTime > startTime && selectedTime < endTime) {
// time is inbetween shifts
}
添加回答
舉報(bào)