concrete5 8.4.2如何在小部件中以用户日期时间显示“明天09:00:00”?

时间:2018-08-16 13:48:27

标签: php datetime concrete5 concrete5-8.x

$dt = new DateTime('tomorrow 09:00:00');
echo $app->make('helper/form/date_time')->datetime('dt', $dt, false, true, null, 1800, array());

仅在系统服务器时间与用户的时间相同时显示正确的日期和时间。本地主机但是,如果服务器和用户位于不同的时区,则用户端的$ dt不再是这样。

我也尝试过:

$dt = $dh->formatDateTime(date("Y/m/d H:i:s"), false, false, 'user');

显示当前用户的日期和时间,但是一旦我在其中更改任何内容(例如添加日期或时间或其他任何内容,它就会回到服务器的日期时间)。

例如,上面显示了今天的17/08/18 1:00(现在是正确的用户时间),但是

$dt = $dh->formatDateTime(date("Y/m/d H:i:s", strtotime("tomorrow 9:00")), false, false, 'user');

显示18/08/18 1:00,这是9:00-10小时(时区=服务器时间)。

如何显示用户的确切日期和时间(明天9:00)而不是系统的确切日期和时间?

1 个答案:

答案 0 :(得分:0)

您可以使用以下解决方案:

// frontend
<script> timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; </script>

这将为您提供timezone中浏览器的时区。您需要将其传递给后端,并使用它为用户调整时间。下面,上面的timezone的值已存储在$timezone中。

// backend
$time = new \DateTime('now');
$time->setTimezone(new \DateTimeZone($timezone));