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

标签 javascript php css

我想通过显示“开门”和“关门”图像来显示企业“开门或关门”的时间。诀窍是,我希望根据来自 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/

相关文章:

javascript - 根据用户输入自动完成字段重定向到 URL

javascript - 调整图标大小以适应 div

javascript - 如何使用 javascript 和 laravel 将数据传递到数据库

php - 有没有办法不用数据库就可以创建群聊?

javascript - 在 jquery ui 对话框中使用很棒的字体图标

php - 使用PHP的NLP编程工具?

html - 悬停滚动不应该是一个 SCSS

python - 分配 css 类以形成从 flask 传递到 jinja 的元素

html - 将 div 放在 div 之上,底部垂直对齐

javascript - 当其中一个变大时,如何使组成网格的 div 保持原位?