0

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

配置.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它将被转换为时间戳并保存在数据库中,但不正确,它应该减去 2:00 并保存该时间戳到 db 作为12-25-2012 20:30:00的时间戳(这将转换为 gmt)

希望你能理解。

有什么解决办法吗?谢谢。

4

1 回答 1

2

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

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

然后,在您的 INSERT 或 UPDATE 查询中,您可以使用 DATE_ADD('2012-12-13 19:41:00', [user offset] 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]

于 2012-12-13T18:39:15.517 回答