我正在用户设置页面上,该页面上有一些用户的默认设置,例如用户默认时区,用户日期格式,用户时间格式。
我能够在数据库中存储用户特定的设置并获取它们。但是当用户更改其时区时,它已正确设置,但不会根据最新时区显示日期。
例如,用户当前时区为“亚洲/加尔各答”,当他将时区更新为其他时区(如“ 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
我希望根据选定的时区显示日期和时间,而无需重新登录。
如果有人可以在正确的方向上帮助我,那将非常有帮助。
谢谢
答案 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'));
谢谢!