Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime,与';我不能用PHP工作_Php_Datetime_Google Calendar Api - Fatal编程技术网

Datetime,与';我不能用PHP工作

Datetime,与';我不能用PHP工作,php,datetime,google-calendar-api,Php,Datetime,Google Calendar Api,一些背景信息(如果需要,可以跳过) 项目如下我有一个arduino连接到互联网控制一些继电器在我当地的童子军大楼取暖,当有人在场时我想让继电器继续,项目的这一部分是从谷歌日历上获取日期和时间,并检查约会是否在此时发生,这样继电器就可以打开了。此脚本将与cron作业一起运行,以便每隔5分钟左右检查一次条件是否必须打开继电器,问题是我似乎无法检查时间是否介于开始时间和结束时间之间。 所以,你知道一些背景信息,这可能有助于解决或改进代码:)这可能是非常愚蠢的事情,但经过几个小时的尝试,我会回到你们身边

一些背景信息(如果需要,可以跳过) 项目如下我有一个arduino连接到互联网控制一些继电器在我当地的童子军大楼取暖,当有人在场时我想让继电器继续,项目的这一部分是从谷歌日历上获取日期和时间,并检查约会是否在此时发生,这样继电器就可以打开了。此脚本将与cron作业一起运行,以便每隔5分钟左右检查一次条件是否必须打开继电器,问题是我似乎无法检查时间是否介于开始时间和结束时间之间。 所以,你知道一些背景信息,这可能有助于解决或改进代码:)这可能是非常愚蠢的事情,但经过几个小时的尝试,我会回到你们身边

代码 我有以下代码:

<?php
error_reporting(E_ALL);
   ini_set('display_errors', '1');
  $url='https://www.googleapis.com/calendar/v3/calendars/ijo7cj2i5dl958l15e4tml6pk8%40group.calendar.google.com/events?maxResults=10&orderBy=startTime&showDeleted=false&singleEvents=true&fields=items(end%2Cstart%2Csummary)&key=AIzaSyCBCQC6N55-k8TpOPkVNdyuVHV2MAp5-DI';
// create a new cURL resource

function download_page($path){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$path);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    $retValue = curl_exec($ch);          
    curl_close($ch);
    return $retValue;
}

$json=json_decode(download_page($url),true);
$i=0;

foreach($json["items"] as $item){
    $dateNOW= new DateTime('NOW');
    $dateNOW->add(new DateInterval('PT1H00S'));
    echo $item["summary"]."<br>";
    //echo $test["start"]["dateTime"]."<br>";
    $dateBegin = DateTime::createFromFormat('Y-m-d\TH:i:sP',$item["start"]["dateTime"]);
    echo $dateBegin->format('d-m-Y H:i')."<br>";
    $dateEnd = DateTime::createFromFormat('Y-m-d\TH:i:sP',$item["end"]["dateTime"]); 
    echo $dateEnd->format('d-m-Y H:i')."<br>";
    echo $dateNOW->format('d-m-Y H:i')."<br>";
    if($dateNOW>$dateBegin){
        echo "Tim/date is bigger then datebegin<br>";
        if($dateNOW<$dateEnd){
            echo"Tim/date is bigger then dateEND<br>";
        }
    }
}
?>

我的问题是,我运行程序的时间/日期比datebegin大会正确工作,但时间/日期比dateEND大根本不会出现。我从各种各样的资源中尝试了很多不同的东西,但我就是无法让它发挥作用,有人能帮忙吗


顺便说一句,错误报告仅适用于我的服务器,因为我通常不希望人们看到我的错误

Php日期时间可以直接使用<>=。 我能想到的唯一问题是在不同的Tinezone中,因此我建议您尝试prinr_r($dateNOW),以及其他两个变量,并查看输出(而不是使用->格式格式化结果,这可能取决于时区)

可以使用将datetime对象设置为同一时区

$dateEnd->setTimezone(new DateTimezone("your timezone"))
或者将检索到的时间戳与

$dateEnd->getTimestamp()

你不能比较DateTime对象,如“$dateNOW>$dateBegin”。比较它们的时间戳。现在有可能是一天,因为它现在工作很酷。上次我尝试它时,它没有工作。它是在旧版本上。非常感谢你,我太笨了--dateNOW的时区不是UTC+1,非常感谢!