根据忙/闲呼叫更改图像

时间:2015-04-17 19:48:12

标签: javascript php css

我希望展示什么时候开业或关闭?"通过显示" open"并且"关闭"图片。诀窍是,我希望根据来自Google日历的忙/闲电话来获取信息。到目前为止,该页面正在提取正确的信息 - 问题是,当我用JavaScript对数据进行分区时,CURRENT时间是正确的,"忙碌的结束时间"事件是正确的,但开始时间显示在它应该的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小时之间的某个地方,数据会回来说这个事件&#34;忙碌&#34;并将业务显示为&#34;已打开&#34;即使它不应该打开/忙碌几个小时。

我知道数据本身会返回数字信息,并且我使用相同的方法来分配开始时间,因为我是当前的时间和结束时间,所以我想我&#39;我只是没有看到问题出在哪里。

1 个答案:

答案 0 :(得分:3)

第1部分)

如果数据偏移到另一个时区,您可能希望在进入时调整它。可以是您的时区,也可以是GMT。默认时区指示日期/时间函数如何工作,它们不会神奇地转换日期和时间。您需要使用已知的偏移处理它。

您需要注意的是:

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

您可能需要考虑从PHP传入该值,而不是客户端。 TZ的问题出现在执行计算中。否则它只是某个时间点的表示。

第2部分)

这看起来像是错误的比较:

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

假设您想要start对象中的data。所以... data.start ...不是100%清除该对象/数组的结构。使用console.log来电以确保您的比较是犹太人的。感觉也许你也错过了一个循环? data不是插槽的集合吗?否则这种方法看起来不错。