gpt4 book ai didi

javascript - 根据空闲/忙碌调用更改图像

转载 作者:行者123 更新时间:2023-11-30 12:25:02 24 4
gpt4 key购买 nike

我想通过显示“开门”和“关门”图像来显示企业“开门或关门”的时间。诀窍是,我希望根据来自 Google 日历的空闲/忙碌电话获取信息。到目前为止,页面本身正在提取正确的信息——问题是当我用 JavaScript 对数据进行 parced 时,当前时间是正确的,“忙碌”事件的结束时间是正确的,但是开始时间比预期提前 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 并且事件在美国东部时间下午 2:00 结束 - 标志显示关闭。如果是美国东部时间 1:30,事件开始时间是美国东部时间 1:00,事件结束时间是美国东部时间 2:00,则显示已开始。如果事件开始时间是美国东部时间晚上 8 点,时间是美国东部时间下午 2:00,则表明事件已结束。 但是,如果开始时间是 future 0 到 6 小时之间的某个时间,则返回的数据会表明该事件“忙碌”,并将商家显示为“营业”,即使它不应该营业/忙碌小时。

我知道数据本身会返回数字信息,而且我使用与当前时间和结束时间相同的方法来计算开始时间,所以我想我只是没有看到问题出在哪里。

最佳答案

第 1 部分)

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

你要注意的是:

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

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

第 2 部分)

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

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

假设您希望从data 对象start。所以... data.start... 不是 100% 清楚该对象/数组的结构。使用您的 console.log 调用来确保您的比较是正确的。感觉也许你也错过了一个循环? data 不是槽的集合吗?否则该方法看起来不错。

关于javascript - 根据空闲/忙碌调用更改图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29708162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com