将PHP回显日期转换为客户端本地时间

时间:2013-08-19 18:43:19

标签: php javascript date localtime

这是我的第一篇文章。我有一个问题似乎无法解决。在这里:

我有一个PHP脚本,可以将事件的日期打印到页面:

$event_datetime = date("g:i A (m/d/y)", strtotime($row['event_time']));
echo $event_datetime

我想使用Javascript将$ event_datetime转换为客户端本地时区或本地客户端计算机时间。

有什么想法吗?

提前致谢!

3 个答案:

答案 0 :(得分:5)

不要回复日期到javascript,只需回显时间戳并使用javascripts日期对象。

var date = new Date(<?php echo strtotime($row['event_time']) * 1000); ?>);

您现在可以使用javascripts日期对象打印出您想要的时间。 像这样:

date.toLocaleDateString();
//The default output will be the users' timezone (the client where the javascript is being executed), but can be configured with the options argument

请参阅:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

有关javascript日期对象的更多信息

答案 1 :(得分:2)

您可以使用php将所有日期转换为时区:

date_default_timezone_set('America/Los_Angeles');

例如:

$time = time();
$date = date(DATE_RFC822, $time);
echo $date . PHP_EOL;

date_default_timezone_set("Australia/Perth");
$date = date(DATE_RFC822, $time);
echo $date. PHP_EOL;

输出:

Mon, 19 Aug 13 18:49:40 +0000
Tue, 20 Aug 13 02:49:40 +0800

您只需要从某个地方获取客户端时区(保存在数据库中的首选项或通过javascript获取它)。

请参阅Getting the client's timezone in JavaScript了解如何使用javascript

答案 2 :(得分:1)

我得到了我正在寻找的答案,但我感谢你们抽出时间来帮忙。你的解决方案很棒,但不是我需要的。好的,这是我得到它的方式:

请记住$ row [&#39; event_time&#39;]是UTC时区数据库中保存的日期时间值。

while($row = $result->fetch_assoc())
{
    $s_date = new DateTime($row['event_time'],new DateTimeZone('UTC'));
    $s_date->setTimezone(new DateTimeZone('America/New_York'));
    $start_event_time = $s_date->format('g:i:s A (m/d/y)');
    echo $start_event_time;
}

您可以创建一个获取当前用户时区的附加脚本,并更改​​ America / New_York 以使其更具动态性。

希望能帮助有同样问题的人。