我有此消息传递系统,我的计划是将所有消息存储在纽约时间下,然后使用一些javascript将它们转换为用户时区(以查找其时区)。因此,我根据用户所在的时区获取当前时间,然后以纽约为当前时间,然后从消息时间中添加或减去该时间以进行转换。但是由于某种原因,我的date_diff无法正常工作。这是我的代码:
$dateofmessage = date_create($message['date_time']);
date_default_timezone_set("{$_GET['userTimezone']}");
$date1 = date_create(date("y-m-d H:i:s"));
date_default_timezone_set('America/New_York');
$date2 = date_create(date("y-m-d H:i:s"));
if ($date1 > $date2) {
$diff = date_diff($date1, $date2);
$differenceToAddOrSub = $diff->format("%y years %m months %d days %h hours %i minutes %s seconds");
$changeddate = date_create(date_add($dateofmessage, date_interval_create_from_date_string("$differenceToAddOrSub")));
} elseif ($date2 > $date1) {
$diff = date_diff($date2, $date1);
$differenceToAddOrSub = $diff->format("%y years %m months %d days %h hours %i minutes %s seconds");
$changeddate = date_create(date_sub($dateofmessage, date_interval_create_from_date_string("$differenceToAddOrSub")));
}
答案 0 :(得分:0)
首先,确保$date1
和$date2
产生预期的输出。 date
函数取决于服务器的时间配置。确保服务器的时区正确。您可以使用SSH中的date
进行检查。
date_create
接受格式为date('Y-m-d')
而不是date('Y-m-d H:i:s')
的日期。后一种格式会导致无法预测的结果。
$date1 = date_create(date("Y-m-d"));