我在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)
希望你能理解。
任何解决方案? 感谢。
答案 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]