2015-04-17 79 views
1

我想通過顯示「打開」和「關閉」圖像來顯示企業何時「打開或關閉」。訣竅是,我希望基於來自Google日曆的忙/閒呼叫來獲取信息。到目前爲止,頁面本身正在提取正確的信息,問題是當我用JavaScript來處理數據時,CURRENT時間是正確的,「busy」事件的END時間是正確的,但是啓動時間顯示6小時之前它應該是,我不知道爲什麼或如何糾正它。基於忙/閒呼叫改變圖像

所以PHP是目前:

<!-- Google Calendar for The Commons --> 
<?php 
date_default_timezone_set("GMT"); 
$request = array(
'items' => array(
    array('id' => 'REMOVED FOR PRIVACY'), 
), 
'timeMin' => date('c'), 
'timeMax' => date('c', strtotime('+2 month')), 
); 
$curl = curl_init(); 
$options = array(
CURLOPT_CONNECTTIMEOUT => 5, 
CURLOPT_FOLLOWLOCATION => true, 
CURLOPT_HEADER   => false, 
CURLOPT_RETURNTRANSFER => true, 
CURLOPT_SSL_VERIFYPEER => false, 
CURLOPT_TIMEOUT  => 10, 
CURLOPT_POST   => true, 
CURLOPT_POSTFIELDS  => json_encode($request), 
CURLOPT_HTTPHEADER  => array(
    'Content-Type: application/json', 
    'Content-Length: ' . strlen(json_encode($request)) 
), 
CURLOPT_URL   => 
'https://www.googleapis.com/calendar/v3/freeBusy?fields=calendars&key=REMOVED FOR PRIVACY', 
CURLOPT_USERAGENT  => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10;rv:36.0) Gecko/20100101 Firefox/36.0', 
); 
curl_setopt_array($curl, $options); 
$result = curl_exec($curl); 
curl_close($curl); 
echo $result; 

然後它鏈接以及到JavaScript和明確其提供的所有信息。

$(document).ready(function() { 
$.get("/dining-new/admin/php/commonsgcalendar.php", function (data) { 
    var currenttime = Date(); 
    var nowDate = parseInt(currenttime.substring(8, 11)); 
    var nowHour = parseInt(currenttime.substring((16, 18)) - 4) * 60; 
// its in GMT so to get EST I'm subtracting 4 hours then changing everything into minutes by multiplying by 60 
    var nowMin = parseInt(currenttime.substring(19, 21)); 
    nowMin = (nowHour - 240) + nowMin; 

    var firststart = data.indexOf("start"); 
    var startdate = parseInt(data.substring((firststart + 17), (firststart + 19))); 
    var startHour = parseInt(data.substring((firststart + 20), (firststart + 22)) - 4) * 60; 
    var startMin = parseInt(data.substring((firststart + 23), (firststart + 25))); 
    startMin = (startHour - 238) + startMin; 

    var endDate = parseInt(data.substring((firststart + 53), (firststart + 55))); 
    var endHour = parseInt(data.substring((firststart + 56), (firststart + 58)) - 4) * 60; 
    var endMin = parseInt(data.substring((firststart + 59), (firststart + 61))); 
    endMin = (endHour - 240) + endMin; 

    var areWeOpenNow = true;= 
    if (nowDate != startdate) { 
     areWeOpenNow = false; 
    } else { 
    if ((startMin <= nowMin) && (nowMin <= endMin)){ 
     areWeOpenNow = true; 
     } 
    } 
     if (areWeOpenNow) { 
      $('.areweclosedfive').removeClass('areweclosedfive'); 
      $('#commonsselect').addClass('weAreOpened'); 
     }  
    }); 
}); 

正如我所說的,該功能是整體工作。如果時間是2:01 est,並且事件在下午2:00結束,則標誌顯示關閉。如果是1:30 est,活動開始時間是1:00 est,活動結束時間爲2:00 est,則表示已打開。如果活動開始時間爲晚上8點,時間爲下午2點,則表示它已關閉。 但是,如果開始時間在未來0到6小時之間,那麼數據會回來說事件「繁忙」,並顯示該業務爲「已打開」,即使它不應該在幾小時內打開/忙碌。

我知道數據本身帶有數字信息,而且我使用相同的方法來分配開始時間,因爲我是當前時間和結束時間,所以我想我只是沒有看到問題的根源所在進來。

回答

3

1部分)

如果數據過來偏移到另一個時區,你可能希望在。無論是調整它的道路上你的時區,或說GMT。默認時區決定日期/時間函數的工作方式,它們不會奇蹟般地轉換日期和時間。你需要使用已知的偏移量來處理它。

要注意什麼事情,如:

var currentTime = new Date().getHours(); 

你可能要考慮在價值傳遞從PHP,而不是客戶端。 TZ的問題出現在計算中。否則,它只是某個時間點的表示。

第2部分)

這看起來像一個錯誤的比較:

if ("start" < currentTime && currentTime < "end") 

假設你想從data對象start。因此... data.start ...對象/數組的結構不完全清楚。使用您的console.log來電確保您的比較是猶太教。感覺也許你錯過了一個循環呢? data是不是一個插槽的集合?否則這種方法看起來不錯。

+0

這就是我在想的事情之一,我該如何糾正它? – petiteco24601

+0

我打算說同樣的事情,但它看起來像你比較一個字符串,而不是值 – Enjayy