Php 准确比较不同时区的日期和归零时间

Php 准确比较不同时区的日期和归零时间,php,datetime,Php,Datetime,我正在检查是否有两件事发生在同一天,但我有一点小麻烦 使用Xero API,我得到一个工资日历列表,每个日历都有一个开始时间和结束时间,这些时间以Y-m-d的形式返回,小时/分/秒归零,时区澳大利亚/悉尼如下: DateTime Object ( [date] => 2018-05-01 00:00:00.000000 [timezone_type] => 3 [timezone] => Australia/Sydney ) 我得到了一份员工最近的时间表列表,它们有一个开始

我正在检查是否有两件事发生在同一天,但我有一点小麻烦

使用Xero API,我得到一个工资日历列表,每个日历都有一个开始时间和结束时间,这些时间以Y-m-d的形式返回,小时/分/秒归零,时区澳大利亚/悉尼如下:

DateTime Object ( [date] => 2018-05-01 00:00:00.000000 [timezone_type] => 3 [timezone] => Australia/Sydney ) 
我得到了一份员工最近的时间表列表,它们有一个开始和结束日期,应该与工资日历周期相匹配——但它们返回的是时区Z(Zulu?),再次返回的是时间为零的,例如:

DateTime Object ( [date] => 2018-04-30 00:00:00.000000 [timezone_type] => 2 [timezone] => Z ) 
我发誓我在这里问之前在谷歌上搜索过,但我还是会问:

我如何比较这两个日期?我试着从startDate->format('Y-m-d')创建一个新的日期时间,我试着将时区设置为Zulu(显然超出了10个小时),试着从Zulu时间的克隆创建一个新的日期时间,在那里我设置了时区,然后只得到了其中的Y-m-d部分。。。“有效”的方法是克隆日期,设置时区,然后将时间设置为0。。。 像这样:

$startDate = DateTime::createFromFormat('Y-m-d', $calendar->getStartDate()->format('Y-m-d'), new DateTimeZone("Australia/Sydney"))->setTime(0,0);

有更好、更整洁的方法吗?

我可能误解了你的问题,但我假设你只是想确定这两个日期是否相同,在它们被调整为时区偏移量之后

使用两个
DateTime
对象只需调用
DateTime::diff
。如果天数差为零,则两个日期相同(忽略时间)


如果它们已经是
DateTime
对象,并且已经设置了正确的
DateTimeZone
,那么您需要做的就是根据最后一行代码来区分日期。它们是DateTime对象,具有不同的时区,具有零时间。我想主要的问题是它很难看,但如果是这样的话,我想也是这样。什么是丑陋的?这是一行代码-
$t->diff($p)->days==0
if($calendar->getStartDate()->diff($entry->getStartDate())->days==0&&$endDate->diff($entry->getEndDate())->days==0){
// Payroll date
$p = new DateTime('2018-05-01 00:00:00.000000', new DateTimeZone('Australia/Sydney'));

// Timesheet date
$t = new DateTime('2018-04-30 00:00:00.000000', new DateTimeZone('UTC'));

var_dump($t->diff($p)->days === 0); // same