用户可以通过任何方法从(数据库)他们在profileigniter中的配置文件设置时区吗?

时间:2019-07-05 14:21:58

标签: php codeigniter timezone codeigniter-3

我正在用户设置页面上,该页面上有一些用户的默认设置,例如用户默认时区,用户日期格式,用户时间格式。

我能够在数据库中存储用户特定的设置并获取它们。但是当用户更改其时区时,它已正确设置,但不会根据最新时区显示日期。

例如,用户当前时区为“亚洲/加尔各答”,当他将时区更新为其他时区(如“ America / New_York”)时,详细信息将保存在数据库中,并且还会显示当前时区“ America / New_York”,但是不反映“美国/纽约”的日期和时间。仅显示“亚洲/加尔各答”时间。当我重新登录同一用户时,它会根据上次更新的时区显示正确的时间。

我已经尝试过以下代码

$utc_time = $dateinfo; // date from database
$timezone = $ci->session->userdata('user_settings')->TIME_ZONE; // user last updated timezone
$date_obj = new DateTime($utc_time, new DateTimeZone($ci->session->userdata('user_settings')->TIME_ZONE));
$date_obj->setTimeZone(new DateTimeZone($timezone));
$display_date = $date_obj->format(get_datetimeformat() . '(e)');

return $display_date; // show date based on updated timezone

我希望根据选定的时区显示日期和时间,而无需重新登录。

如果有人可以在正确的方向上帮助我,那将非常有帮助。

谢谢

3 个答案:

答案 0 :(得分:0)

在您的控制器中执行此操作

  $user_timezone = 'Asia/Tokyo'; //make sure you get this data from your user
  date_default_timezone_set($user_timezone); //set it as default according to their time zone.

   echo $user_timezone. "<br>";
   echo date('Y-m-d');
   echo "<br>The time is " . date("h:i:sa");

让我知道结果。

希望有帮助:)

答案 1 :(得分:0)

将此代码添加到Controller

<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
date_default_timezone_set('Asia/Kolkata');



?>

答案 2 :(得分:0)

感谢所有回复。我已经解决了这个问题。

我已经在应用程序中将所有date()函数转换为gmdate(),因此现在所有日期和时间都存储在数据库的UTC中。

我对助手功能做了一些更改,如下所示,它对我来说就像是魅​​力。

$date_obj = new DateTime($utc_time, new DateTimeZone('UTC'));

谢谢!