亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查給定時間(僅小時:分鐘)是否位于其他兩個不同時間之間?

檢查給定時間(僅小時:分鐘)是否位于其他兩個不同時間之間?

30秒到達戰場 2023-07-14 10:24:39
我有兩個不同的時間: var shiftStartTime = "05:48"; var shiftEndTime = "14:29";我還有另一個時間selectedDate =“06:20”(這將根據 datetimepicker 選擇而改變),我想檢查selectedDate是否應該在(shiftStartTime 和shiftEndTime)之間。有人可以幫忙嗎?更新的代碼:我有 6 個不同的時間跨度,如下所示var shift1StartTime = "05:48";var shift1EndTime = "14:18";var shift2StartTime = "14:30";var shift2EndTime = "22:29";var shift3StartTime = "22:30";    var shift3EndTime = "05:47";使用所有 6 個時間跨度,我想檢查給定時間是否在(shift1StartTime 和 shift1EndTime)之間返回 shift1或者如果給定時間介于 (shift2StartTime 和 shift2EndTime) 之間,則返回 shift2或者如果給定時間介于 (shift3StartTime 和 shift3EndTime) 之間,則返回 shift3
查看完整描述

4 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

只需比較字符串即可


var shiftStartTime = "05:48"; var shiftEndTime = "14:29";


shiftStartTime > shiftEndTime // false


查看完整回答
反對 回復 2023-07-14
?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

好的,所以您得到了格式為字符串的三個相對時間HH:mm。我假設您的時間以 24 小時字符串/軍事時間形式給出,因為否則,您需要 AM / PM 說明符。


將您正在使用的數據采用適合機器可讀的格式總是很有用的,因此您可以將它們解析為將小時和分鐘作為數字保存的簡單對象。


執行此操作的函數可能如下所示。


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 };

}

好的,現在你已經有了這些對象了。你如何比較它們?有一個模式:讓一個函數返回第一個參數是否大于 (1)、等于 (0) 還是小于 (-1) 第二個參數。


既然時間是一個對象,那么寫這個就很簡單了:


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;

    }

}

好吧,現在我們可以有一個輔助函數來檢查第一個參數是否位于最后兩個參數定義的閉區間內:


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;

}

然后您最終可以通過調用進行比較isInShift(parseTimeStr(selectedTime), parseTimeStr(shiftStartTime), parseTimeStr(shiftEndTime))。這將返回一個布爾值。您可以輕松擴展此基礎架構以實現多個輪班。


請注意,現實和您的用戶都可能比您想象的更……扭曲。上面的代碼沒有對無效時間輸入進行錯誤處理,也沒有考慮夜班,但這些都是你可以輕松計算出來的細節,你只需要花點功夫去思考它們。


查看完整回答
反對 回復 2023-07-14
?
精慕HU

TA貢獻1845條經驗 獲得超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);

}


查看完整回答
反對 回復 2023-07-14
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

這里有一些 JS 可以做到這一點,盡管更好的格式時間會讓它變得更容易


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

}


查看完整回答
反對 回復 2023-07-14
  • 4 回答
  • 0 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號