1

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

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

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

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

有任何想法吗 ?

提前致谢 !

4

3 回答 3

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 日期对象的更多信息

于 2013-08-19T18:47:45.603 回答
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 获取它)。

请参阅在 JavaScript 中获取客户端的时区以使用 javascript

于 2013-08-19T18:50:20.840 回答
1

我得到了我正在寻找的答案,但我感谢你们花时间提供帮助。您的解决方案很棒,但不是我需要的。好的,这就是我得到它的方法:

请记住,$row['event_time'] 是保存在 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以使其更具动态性。

希望它可以帮助遇到我同样问题的人。

于 2013-08-20T15:51:54.350 回答