2017-01-29 26 views
0

我使用以下JavaScript查看業務是否基於營業時間打開。它非常簡單,而且效果很好,但是我怎樣才能在凌晨0點或凌晨1點的午夜時分開始工作。不幸的是它只適用於像17倍:00-23:00,但不是17:00-030:如何使這個javascript與午夜營業時間一起工作?

var d = new Date(); 
var n = d.getDay(); 
var now = d.getHours() + "." + d.getMinutes(); 
var weekdays = [ 
    ["Sunday", 9.30, 12.00, 15.30,22.00], 
    ["Monday", 8.30, 12.00, 15.30,19.00], 
    ["Tuesday", 8.30, 12.00, 15.30,19.00], 
    ["Wednesday", 8.30, 12.00, 15.30,19.00], 
    ["Thursday", 8.30, 12.00, 15.30,19.00], 
    ["Friday", 8.30, 11.30], 
    ["Saturday"] // we are closed, sorry! 
]; 
var day = weekdays[n]; 


if (now > day[1] && now < day[2] || now > day[3] && now < day[4]) { 
    console.log("We're open right now!"); 
} 
else { 
    console.log("Sorry, we're closed!"); 
} 

我知道這個腳本不支持時區,但這個ISN這對我來說並不重要,因爲這隻適用於與客戶始終處於同一時區的本地業務。

在此先感謝。 PS:最初的劇本是從這裏計算器Javascript Store Opening Hours

更新版本另一篇文章中,我改變了腳本,因爲我使用火​​力JSON數據並獲得已爲這一天的時間,所以我不需要與天陣。

<script> 

    var d = new Date(); 
    var n = d.getDay(); 
    var now = d.getHours() + "." + d.getMinutes(); 

    // this is what I get from firebase already 
    // so I dont need to loop throught the days but throught the 2 different opening times. 
    var day = { 
    "from": 8.30, 
    "to": 10, 
    "from2": 14.30, 
    "to2": 23  
    }; 

console.log('Now: ' + now); 

    if (now > day.from && now < day.to || now > day.from2 && now < day.to2) { 
     console.log("We're open right now!"); 
    } else { 
     console.log("Sorry, we're closed!"); 
    } 

</script> 

如果我有類似17:00-01:00的東西,這怎麼辦?

回答

0

你可以用當地時間工作或者在用最新的圖書館像http://www.datejs.com/https://momentjs.com/

解析(new Date).toLocaleString(),並在此基礎上的日期 - 時間數據的工作。

var date = new Date(); 
var formatted = date.toLocaleString('de-DE'); 

爲了得到時區,你可以使用navigator.language

+0

THX您的回覆也考驗。我對momentjs有不好的經驗,因爲ios上的結果與我在android或瀏覽器上的結果不同。我想避免使用像momentjs或時區等額外的JavaScript的原因。我也想盡可能保持簡單。 – Oliver

0

你可以嘗試這樣的事情。

var d = new Date(); 
var n = d.getDay(); 
var now = d.getHours() + "." + d.getMinutes(); 
var weekdays = [ 
    ["Sunday", 9.30, 12.00, 15.30,2.00], 
    ["Monday", 8.00, 12.00, 15.30,19.00], 
    ["Tuesday", 8.30, 12.00, 15.30,19.00], 
    ["Wednesday", 8.30, 12.00, 15.30,19.00], 
    ["Thursday", 8.30, 12.00, 15.30,19.00], 
    ["Friday", 8.30, 11.30], 
    ["Saturday"] // we are closed, sorry! 
]; 
var day = weekdays[n]; 


if (now < day[1] && now > day[2] || now < day[3] && now > day[4]) { 
     console.log("Sorry, we're closed!"); 
} 
else { 
    if(n != 0){ 
    day = weekdays[n-1]; 
    } 
    else{ 
    day = 6; 
    } 

    if ((now > day[4])) { 
    console.log("Sorry, we're closed!"); 
    } 
    else { 
    console.log("We're open right now!"); 
    } 
} 
+0

您的版本在17:30至01:00之間仍無法使用。如果您更改了例如[「星期天」,9.30,12.00,15.30,1.00]並測試結果爲「關閉!」。我確實已經調整了上面的腳本,因爲我已經從firebase中獲取當前日期的時間爲json。 thx爲你的幫助。 – Oliver

+0

所以,如果你有,你可以使用另外一個if else語句來檢查當前時間可從當天收盤小時 – Leo

+0

之前,我不知道如果我理解你的榜樣,它不是在我的測試工作對我來說是固定的文件格式無論是。也許我解釋錯了。我設置了一個小提琴,以確切顯示我到目前爲止https:// jsfiddle。淨/ oliver2000/4pdogett/1 /我得到的開放時間爲JSON當天。只要day.to或day.to2時間是在同一天,但如果關閉時間爲午夜(第二天)後也不能一切工作。所以如果我修改我的腳本day.to2喜歡的東西1.30失敗。只要我用23:59就可以了。也許你可以用我的小提琴。 thx爲你的時間和幫助。@ leo – Oliver

0

經過測試後我發現了一種方法。我最終創建了一個小功能。您可以將開放和關閉時間發送到該功能,並在業務處於打開或關閉狀態時收到回覆。任何時候都可以使用,也可以在午夜使用。

如何過,這個腳本不會爲企業在其他時區的工作,因爲它不會照顧任何基於位置倍。如果您將本地業務用於客戶與業務運行良好的時區相同的時區,

// Example with JSON data for the current day. 
    var day = { 
    "from": 17.30, 
    "to": 1.30 
    }; 

var check_now = check_business_status(day.from, day.to); 
console.log('The bussines is ' + check_now); 

function check_business_status(from, to) { 

    var d = new Date(); 
    var n = d.getDay(); 
    var now = d.getHours() + "." + d.getMinutes(); 

console.log('Now: ' + now); 
console.log(from + ' // ' + to); 

// First check if to date is smaller than from date and their for tomorrow! 
if (from > to){ 
console.info('Closing time is after midnight! Special Check...'); 

    var status = ''; 
    if (now < to && from > now) { 
     status = "open"; 
    } else if (now > to && from > now) { 
     status = "closed"; 
    } else if (now > to && from < now && now > from) { 
     status = "open"; 
    } 

} else { 
console.info('Closing time is before midnight! Normal Check...'); 
    if (now > from && now < to) { 
     status = "open"; 
    } else { 
     status = "closed"; 
    } 
} 
return status; 
} 

你可以用不同時代的jsfiddle https://jsfiddle.net/oliver2000/4pdogett/1/