2017-06-16 205 views
0

對於以javascript編寫的網站攔截/生產力應用程序,我希望用戶輸入一系列可用於空閒時間(在當地時間)的時間範圍。例如:確定當前時間是否在一組時間範圍內

06:00-06:30

12:30-13:00

23:45-00:不要求15

24格式(我只是假設它會更容易)

然後,程序應該根據當前時間檢查指定的空閒時間範圍,以確定塊模式是打開還是關閉。

我的主要想法是使用內置的JavaScript函數來抓取當前的DateTime,並在必要時將其轉換爲24小時格式。我認爲時間範圍將在一個數組中。我不確定如何檢查當前日期是否在數組範圍內。

該邏輯還必須能夠處理從23:00到0:00的交叉。

無論如何,這是我的思路。感謝任何建議,包括採取不同的路徑。

+0

這將是容易得多,如果範圍爲在單個單元像分鐘(例如06:00-0630將是360-390)或秒。你有什麼嘗試?就目前而言,這個問題太廣泛了。你要求某人爲你編寫所有的代碼。 – RobG

回答

0

無論如何,這是我的思路。感謝任何建議,包括採取不同的路徑。

如果你想檢查是否當前時間是在範圍內,則範圍應該DATE + TIME如當前時間爲DATE + TIME

可能的解決方法

您可以轉換所有三個日期時刻到瞬間實例,只是使用

start.isBefore(current) 
&& current.isBefore(end) 

瞬間文檔isBeforeisAfterhttps://momentjs.com/

+0

這不是一個真正的答案。可以使用'<' and '>'這個簡單的Date對象來完成「可能的解決方案」,但OP只需要時間。 – RobG

0

「我不知道如何檢查,如果當前的日期是數組中的範圍內。」

你會遍歷數組並進行比較。我建議將範圍存儲爲一個對象數組,其中每個單獨的範圍類似於{start: "10:15", end: "10:45"}

JavaScript沒有時間對象,只有Date包含日期和時間信息。所以我認爲將當前時間轉換爲字符串「hh:mm」格式是最容易的,然後只需將簡單的字符串與範圍值進行比較,而不用擔心將範圍值轉換爲日期對象。所以:

var timeRanges = [ 
    { start: "06:00", stop: "06:30" }, 
    { start: "12:30", stop: "13:00" }, 
    { start: "23:45", stop: "00:15" } 
] 

function isTimeInRange(time) { 
    for (var i = 0; i < timeRanges.length; i++) { 
    var range = timeRanges[i] 
    if ((time > range.start && time < range.stop) 
     || (range.start > range.stop && (time > range.start || time < range.stop))) { 
     return true 
    } 
    } 
    return false 
} 

但是你可以使代碼更簡潔和更短的,使用array .some() method,有無arrow functions

var timeRanges = [ 
 
    { start: "06:00", stop: "06:30" }, 
 
    { start: "12:30", stop: "13:00" }, 
 
    { start: "23:45", stop: "00:15" } 
 
] 
 

 
function isTimeInRange(time) { 
 
    return timeRanges.some(range => 
 
    (time > range.start && time < range.stop) 
 
    || (range.start > range.stop && (time > range.start || time < range.stop)) 
 
) 
 
} 
 

 
function pad(d) { 
 
    return ("0" + d).slice(-2) 
 
} 
 

 
function getCurrentTime() { 
 
    var now = new Date() 
 
    return pad(now.getHours()) + ":" + pad(now.getMinutes()) 
 
} 
 

 
console.log("Current time in range? " + isTimeInRange(getCurrentTime())) 
 
// test some other times 
 
console.log(isTimeInRange("06:15")) // true 
 
console.log(isTimeInRange("12:35")) // true 
 
console.log(isTimeInRange("13:30")) // false 
 
console.log(isTimeInRange("23:50")) // true 
 
console.log(isTimeInRange("00:14")) // true

很明顯,你可以改變<>到如果需要,可以使用<=>=

0

嘗試

start = "10:10"; 
 
end = "16:30"; 
 
function isInRange(start, end, current){ 
 
    start = convertTimeToMinute(start); 
 
    end = convertTimeToMinute(end); 
 
    current = convertTimeToMinute(current); 
 
    return start <= current && current <= end; 
 
} 
 
function convertTimeToMinute(time){ 
 
    return +time.slice(0,1)*60 + +time.slice(3,4); 
 
} 
 

 
console.log(isInRange(start,end, "15:20")); 
 
console.log(isInRange(start,end, "20:20"));

+0

'+ time.slice(0,1)* 60 + time.slice(3,4)'應該是'time.slice(0,2)* 60 + + time.slice(3);'since'* 60 '會將第一個字符串轉換爲數字,但第二個切片將使其再次成爲一個字符串。 ;-)發佈時,'convertTimeToMinute('20:20'))'返回'1202'而不是'1220'。 – RobG

+0

糟糕。我的錯。感謝@RobG – Duannx

相關問題