将PHP中的所有日期转换为当地时间

时间:2010-10-27 15:32:04

标签: php javascript codeigniter timezone

我的PHP脚本运行的服务器设置为UTC。我似乎无法找到一种方法来将所有日期设置为浏览器的时区。显示的所有日期都使用PHP的date()函数进行格式化。

我知道通过JavaScript的getTimezoneOffset()函数,我可以获得浏览器的当前UTC偏移量(在我的情况下为-4)。如何告诉PHP使用此偏移量?我可以使用date_default_timezone_set(),但如何将偏移量(比如-4)转换为时区字符串,比如America / New_York?

注意:服务器正在运行PHP 5.1.6(没有DateTime类),我正在使用CodeIgniter。

3 个答案:

答案 0 :(得分:0)

因为Javascript是基于客户端的,而PHP是基于服务器的,所以它们不会进行通信。要告诉服务器浏览器时间,您需要从客户端发送信息,可能通过Ajax发布浏览器时间。然后,目标PHP脚本应该适当地处理/输出它。另一个(钝)选项是尝试基于IP对用户进行地理定位,然后猜测该位置的正确时间 - 但是这对于此目的而言效率低。

答案 1 :(得分:0)

“我知道我可以使用date_default_timezone_set(),但是如何将偏移量(比如-4)转换为时区字符串,比如America / New_York?”

只需查看与该功能文档相关的注释即可。评论#99006可以帮助您完成工作。您只需要从用户那里获得时区偏移量。

答案 2 :(得分:0)

根据上面的评论,您可以使用Cookie ...:

使用Javascript:

var today = new Date();

function SetCookie(cookieName,cookieValue,nDays) {
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

SetCookie("datecookie", today, 30);

window.location.href=window.location.href

PHP:

echo date("m d Y", strtotime($_COOKIE['datecookie']));