我试图检查同一天是否发生了两件事情,但我遇到了一些麻烦。
使用Xero API,我得到一份工资日历列表,每个日历都有一个开始时间和一个结束时间,这些时间以Ymd的形式返回,小时/分钟/秒归零,Timezone Australia / Sydney如下:
DateTime Object ( [date] => 2018-05-01 00:00:00.000000 [timezone_type] => 3 [timezone] => Australia/Sydney )
我获得了一份员工最近的Timesheets列表,他们的开始和结束日期应该与工资核算日历期间相匹配 - 但他们会以时区Z(Zulu?)的形式返回,并再次使用时间归零,如此:
DateTime Object ( [date] => 2018-04-30 00:00:00.000000 [timezone_type] => 2 [timezone] => Z )
我发誓在我问到这里之前我用Google搜索了但是我还是会问:
我如何比较这两个日期?我尝试从startDate->格式创建一个新的DateTime(' Ym-d'),我尝试将时区设置为Zulu(明显超出10小时),尝试从克隆中创建一个新的DateTime祖鲁时间,我设置时区,然后得到它的Ymd部分......一些"工作"是克隆日期,设置时区,然后将时间设置为0 ... 像这样:
$startDate = DateTime::createFromFormat('Y-m-d', $calendar->getStartDate()->format('Y-m-d'), new DateTimeZone("Australia/Sydney"))->setTime(0,0);
有没有更好更简洁的方法呢?
答案 0 :(得分:0)
我可能误解了你的问题,但我会假设你只想确定两个日期是否相同,在调整了时区偏移后。
使用两个DateTime
对象只需拨打DateTime::diff
即可。如果天数差为零,则两个日期相同(忽略时间)。
// 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