【问题标题】:CodeIgniter local timezone to GMTCodeIgniter 本地时区到 GMT
【发布时间】:2012-12-01 17:03:36
【问题描述】:

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

希望你能理解。

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

【问题讨论】:

    标签: php codeigniter timezone local gmt


    【解决方案1】:

    在您的事件表单中,您应该向服务器发送一个隐藏的输入,其中包含客户端的时区偏移量。您可以通过 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]

    【讨论】:

    • 我在 php 中怎么做,我需要那个?
    • 好吧,使用这种形式,您可以使用正则表达式以小时为单位获得偏移量:preg_match('/(.*)\:00/', '+2:00', $match) 将将“+2”设置为 $match[1]。
    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2014-10-25
    • 2016-04-07
    • 2011-01-04
    相关资源
    最近更新 更多