2013-04-01 300 views
1

根据this calculator此日期应为Mon Apr 01 2013 13:11:57 GMT + 0200。但相反,它是服务器时间:2013-04-01 07:11:57。我得到这是一个时区问题(服务器在-4),但是有没有办法使这个时区独立或我必须从数据库中查询用户的时区?将秒转换为日期

$date = 1364814717; 
$date = date('Y-m-d H:i:s', $date); 
+0

是的,你需要询问用户的时区或检查IP地址,并通过地址结构对其进行地理定位。 PHP不能以任何其他方式知道访问者的时区,即使这样,它也是基于位置的,这可能并不总是您的位置(考虑代理)。你也看到现在所有的人都给出了错误的答案,因为你的标题提示了别的问题,而不是你的实际问题状态;) – 2013-04-01 11:35:56

+0

http://stackoverflow.com/questions/2505681/timezone-conversion-in-php检查这个线程 – Svetoslav

+0

如果您需要UTC/GMT格式的输出,请使用'gmdate()'。请注意,推荐的计算器格林尼治标准时间+2。 – mario

回答

0

您可以更改默认的时区是这样的:

date_default_timezone_set('UTC'); 

如果你需要每个用户的这种不同,你总是可以发送未转化的数量和使用JavaScript(见使用getTimezoneOffset)但它可能更好地让用户选择(他们的电脑可能不知道它真的在哪里!)

+0

我仍然需要用户的时区。我想我无法避免查询用户的时区。 – erdomester

+0

@erdomester如果javascript是您的选项,请参阅更新的答案。你也可以尝试从IP服务器端弄清楚,但是这经常会出错(使用代理服务器进行启动) – Dave

+0

不,这是可以的我在其他文件中使用查询,谢谢你的回答。 – erdomester

0

我希望这是你在找什么。

var myDate = new Date(); 
    document.write(myDate.getTimezoneOffset()); 
0

您需要询问用户的位置并将其存储在数据库的配置文件中。你实际上不能依赖任何东西。由于用户可以支持代理,并且似乎与上海一样,但实际上在墨尔本。

例如用户说它在GMT +1。您将选项列表放入用户的配置文件中,并在用户保存时将其写入到名为(例如)timezone的数据库行中。

尝试使用新的DateTime样式(来自ID为7的用户的示例);

PHP

$mysqli = new mysqli("localhost", "my_user", "my_password", "database_name"); 

if ($result = $mysqli->query("SELECT timezone FROM users where user_id = 7")) { 
    $prefix = ''; 

    if ($result[0]->timezone >= 0) { 
     $prefix = '+'; 
    } 

    $date = new DateTime('NOW GMT'.$prefix.$result[0]->timezone); 

    echo '<pre>'; 
    print_r($date); 
    echo '</pre>'; 
} 
else { 
    echo 'Query failed'; 
} 

这里会发生什么事是你只保存GMT偏移量(或任何你想要的timeset使用),并返回基于用户偏好的当前时间。

输出

DateTime Object (
    [date] => 2013-04-01 13:50:08 
    [timezone_type] => 1 
    [timezone] => +01:00 
) 

不要忘记寻找到夏季;)

祝你好运!

+0

哇。伟大的方法!我很少在网站配置文件中看到这一点,但今天我在Drupal上注册并要求提供我的时区。到目前为止,我依赖于用户的时区(getTimezoneOffset())。 – erdomester