我希望展示什么时候开业或关闭?"通过显示" 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;我只是没有看到问题出在哪里。
答案 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
不是插槽的集合吗?否则这种方法看起来不错。