2014-03-06 61 views
2

我创建了一个用户可以选择其时区的用户界面。我的后台是PHP,我知道你可以做到这一点的几种方法,但我对他们都和方式的问题是最好的:根据用户调整PHP时区

http://ca2.php.net/date_default_timezone_set

//where America/Los_Angeles will be changed based on user 
date_default_timezone_set('America/Los_Angeles'); 

这是否变更的服务器时区永用户或只是出口什么?有没有这方面的任何性能问题?

如果是这样的功能会怎么样...?

date_default_timezone_set('America/Los_Angeles'); -08:00设置在php.ini

$date = "2014-01-01 12:00:00"; 
$new_time_zone = "America/New_York" // -05:00 = +3 hours difference 

function adjust_time_zone($string, $zone){ 

    $datetime = new DateTime($string); 
    $new_zone = new DateTimeZone($zone); 
    $datetime->setTimezone($new_zone); 

    return ($datetime->format('Y-m-d H:i:s')); 
} 
adjust_time_zone($date, $new_time_zone); 

结果(我测试了这):

2014-01-01 15:00:00 //3 hours ahead. 

以这种格式一切都在加盖系统将在洛杉矶时间和出口将改变...

我知道有这些配发时区的线程,但似乎有配发的“我不喜欢这样”,而不是任何坚实的“这样吹我的袜子=”

临屋你可以给任何帮助!

+1

_“这会改变服务器的时区吗?” - 当然不会。在脚本运行时,您不能在系统范围内更改任何PHP设置。 – CBroe

回答

2

我将一切都存储在数据库中,作为日期时间和UTC时区。

我将用户的时区存储在db($ timezone)中。

因此,当一个时间($时间)从数据库中取出,我通过下面的函数运行:

function changetimefromUTC($time, $timezone) { 
    $changetime = new DateTime($time, new DateTimeZone('UTC')); 
    $changetime->setTimezone(new DateTimeZone($timezone)); 
    return $changetime->format('m/d/y h:i a'); 
} 

这将返回用户的时区,格式化的时间。

编辑:你可以看到时区的db表在这个线程:

Generating a drop down list of timezones with PHP

2

那么它看起来像你有什么要为你工作。这是一种替代方法,虽然不一定更好。您可以使用PHP的mktime并将小时偏移传递给它。

<?php 
print "<br>Date: ".date("Y-m-d H:i:s"); 

// DEFINE AN OFFSET 
$offset = -5; // TIMEZONE OFFSET: '-5' FOR NEW YORK 

// ADD THE OFFSET TO THE CURRENT TIME 
print "<br>Date Offset: ".$date_offset = date("Y-m-d H:i:s", mktime(date("H") + $offset, date("i"), date("s"), date("m"), date("d"), date("Y"))); 
+0

谢谢你。这个为我工作。对于纽约的抵消也是'-4'小时,你也可以'j F,Y,g:i a'来得到这个'2014年10月16日下午2:00'的格式。再次感谢 – sg552