检索日期并根据用户时区将其转换为特定时区

Posted

技术标签:

【中文标题】检索日期并根据用户时区将其转换为特定时区【英文标题】:Retrieve date and convert it to specific time zone according to user time zone 【发布时间】:2020-07-18 13:33:00 【问题描述】:

我想从数据库(s_start)中检索日期并根据数据库中的用户时区(s_timezone)将其转换为特定时区,如(非洲/开罗)我只能检索存储在数据库中的原始日期,我无法转换结果我的控制器代码:

$this->db->select('s_id');    
$this->db->select('s_start');    
$this->db->from('sessions');

$query = $this->db->get($this->event);
    if ($query) 
        return $query->result();
    
    return NULL;

html代码:

          <div id="cal-slide-content" class="cal-event-list">
          <ul class="unstyled list-unstyled">
        <% _.each(events, function(event)  %>
        <li>
            <span class="pull-left event <%= event['s_start'] %>"> 
         </span>&nbsp;
            <a href="" data-event-id="<%= event.id %>"
                data-event-class="<%= event['class'] %>" class="event- 
              item">
                <%= event.s_start %>&nbsp;<%= event.u_timezone %>&nbsp; 
                (<%= event.u_name %>)&nbsp;
                 </a>

      </li>
       <% ) %>
   </ul>

【问题讨论】:

以 UTC 格式保存日期时间。当用户登录时,获取当前时区并据此显示 嗨,我现在无法在所有应用程序中更改为 utc。当前状态是用户可以查看存储在数据库中的时区日期,但我希望管理员也可以查看管理员时区的日期,如何我做到了 看看这是否有帮助***.com/questions/2095703/php-convert-datetime-to-utc 不适合我 【参考方案1】:
$date = new DateTime($result->s_start, new DateTimeZone($result->s_timezone));
$date->setTimezone(new DateTimeZone('Africa/Cairo'));
echo $date->format('Y-m-d H:i:sP') ;

资源

DateTime class DateTimeZone class

编辑控制器中用于转换时区的函数。

public function _convert_time($result)
    $date = new DateTime($result->s_start, new  DateTimeZone($result->s_timezone));
    $date->setTimezone(new DateTimeZone('Africa/Cairo'));
    return $date->format('Y-m-d H:i:sP') ;

现在您可以回显结果

foreach($results as $result)
    echo $this->_convert_time($result);

【讨论】:

我可以使用mysql触发器在不同时区转换和保存时区而不用php编码 对不起,我对mysql不太了解。 :(

以上是关于检索日期并根据用户时区将其转换为特定时区的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MQ 的 esql 将日期的特定时区转换为 GMT 时区?

使用 Noda Time 在时区之间转换

转换为没有时区的日期和时间? [复制]

将特定时区中的日期转换为 Python 中的时间戳

如何将 Moment.js 日期转换为用户本地时区?

将 UTC 中的 SQL Server 日期时间转换为特定时区