$dtStart=new DateTime($item["start"]["dateTime"]);
$dtEnd =new DateTime($item["end"]["dateTime"]);
$dtStGoogle= new DateTime($event->start->dateTime);
$dtStGoogle->setTimezone(new DateTimeZone("America/Chicago"));
$dtEndGoogle=new DateTime($event->end->dateTime);
$dtEndGoogle->setTimezone(new DateTimeZone("America/Chicago"));
$dtDiffStart=$dtStart->diff($dtStGoogle);
$dtDiffEnd=$dtEnd->diff($dtEndGoogle);
我使用的是PHP 5.6.13和现在的5.6.14 然后我尝试比较它们,结果总是 true 或始终 false ,无论值是什么。
if ($dtDiffEnd) { printf("<br> Start Date time are different %d %d %d %d %d %d ",$dtDiffStart->m,$dtDiffStart->d,$dtDiffStart->y,$dtDiffStart->h,$dtDiffStart->m,$dtDiffStart->s);} incorrect
if (!$dtDiffEnd) { same as above} incorrect
if ($dtStart!=$dtStartGoogle) {same as above} incorrect
if ($dtStart!==$dtStartGoogle) {same as above} incorrect
我得到的结果的值为0 0 0 0 0 0(总是为真)或无(总是为假),两者都不正确。我尝试了其他同样结果的疯狂事情。
我已经尝试过所有我能想到的东西,任何人都知道我做错了什么?
这很有效,但必须有一个更简单的方法:
if ((($dtDiffEnd->m!=0) || ($dtDiffEnd->d!=0) || ($dtDiffEnd->y!=0) || ($dtDiffEnd->h!=0) || ($dtDiffEnd->i!=0) || ($dtDiffEnd->s!=0)))
任何建议表示赞赏。
答案 0 :(得分:0)
$dtDiffStart=$dtStart->diff($dtStGoogle);
$dtDiffEnd=$dtEnd->diff($dtEndGoogle);
是DateInterval的2个实例,所以它总是被认为是真的。
if ($dtStart!=$dtEndGoogle)
在您的情况下,它将始终返回true,因为您的两个DateTime实例不同(不同的时区)
如果您只是想检查$ dtStart和$ dtEndGoogle是否不同,请执行以下操作:
($dtStart->format('U') != $dtEndGoogle->format('U'))
'U'用于获取unix时间戳。您可以根据需要更改格式。