CodeIgniter到GMT的本地时区

时间:2012-12-13 18:25:45

标签: php codeigniter timezone local gmt

我在codeigniter中需要多时区网站的帮助。

的config.php:

$config['time_reference'] = 'gmt';
date_default_timezone_set('UTC');

现在当用户想要查看事件(网站是针对事件)时,它会使用 gmt_to_local()功能向他的时区显示日期,这样可以正常工作..

现在的问题是当用户想要添加新事件时,他会选择日期和时间,现在它被转换为时间戳:

strtotime($event_date);

问题是他在他的时区选择事件的日期和时间,现在我需要将其转换为gmt,然后保存到db。

例如,如果用户在UP2(+2:00)并且他设置 12-25-2012 22:30:00 ,它将被转换为时间戳并保存在db中,但它是不正确,它应该减去2:00并将该时间戳保存为db作为 12-25-2012 20:30:00 的时间戳(这将转换为gmt)

希望你能理解。

任何解决方案? 感谢。

1 个答案:

答案 0 :(得分:2)

在您的活动表单中,您应该向服务器发送一个隐藏的输入,其中包含客户端的时区偏移量。您可以通过Javascript的Date.getTimezoneOffset()方法获取它(它为您提供UTC和用户当地时间之间的分钟偏移量。)

如果您不能这样做,您可以将用户的本地时区保存到数据库中或在活动表单中询问。

然后,在INSERT或UPDATE查询中,您可以使用DATE_ADD('2012-12-13 19:41:00',[用户偏移] MINUTE)来转换时间戳。您也可以在提交表单时在php或客户端执行此操作...

例如在PHP中:

strtotime($event_date);

为您提供日期的Unix时间戳(以秒为单位)。要将其转换为另一个时区,根据您使用javascript方法获得偏差(以分钟为单位),您可以执行以下操作:

$dbTimestamp = strtotime($event_date) + $_POST['offsetInMinutes']/60;

如果你得到这种形式的偏移:'+2:00'或'-6:00',你可以使用正则表达式以小时为单位获得偏移:

preg_match('/(.*)\:00/', '+2:00', $match)

将'+2'设置为$ match [1]