一些背景信息(如果需要,可以跳过) 该项目如下我有一个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>";
}
}
}
?>
我的问题是,我运行程序的Tim / date更大,然后datebegin将正常工作但Tim / date比日期更大END根本不会出现。我从各种资源中尝试了很多不同的东西,但我不能让它工作,有人可以帮忙吗?
BTW错误报告仅适用于我的服务器,因为我通常不希望别人看到我的错误
答案 0 :(得分:2)
Php DateTime使用&lt;&lt; &GT; =。 我能想到的唯一问题是在不同的tinezones,所以我建议你尝试prinr_r($ dateNOW),以及其他两个变量,并查看输出(而不是使用 - &gt;格式化结果,这可能是是时区依赖的。
您可以使用
将datetime对象设置为相同的时区$dateEnd->setTimezone(new DateTimezone("your timezone"))
或者比较用
检索的时间戳$dateEnd->getTimestamp()