我有一个应用程序,必须管理2种日期:
为此,我在寄存器中设置了带有偏移的GMT时区的选择。通过这种方式,我采用一个数组并用GMT偏移量改变小时数。
当我尝试使用PHP时区设置功能时出现问题,它使用UTC,因此GMT时区无关紧要。如果我在注册时向用户请求UTC时区,我没有偏移来翻译日/小时表。
所以我需要找到一种方法来使用其中一种(UTC或GMT),甚至是在它们之间转换偏移的方法。
修改 翻译小时功能
public static function convertCalendarConfigToTimeZone($timezone_id, $psico_id){
$timezone = Timezone::find($timezone_id);
$configs = User::find($psico_id)->calendar_configs;
$hours_array = [
array("day"=>"0", "configs"=>array()),
array("day"=>"1", "configs"=>array()),
array("day"=>"2", "configs"=>array()),
array("day"=>"3", "configs"=>array()),
array("day"=>"4", "configs"=>array()),
array("day"=>"5", "configs"=>array()),
array("day"=>"6", "configs"=>array()),
];
foreach($configs as $diaHora){
$newhour = $diaHora->hour+$timezone->offset;
$newday = $diaHora->day;
if($newhour<0){
$newhour = 24 - $newhour;
}
if($newhour>$diaHora->hour){
$diaHora->day = $diaHora->day-1;
}
if($diaHora->day<0){
$diaHora->day = 6;
}
if($diaHora->day>6){
$diaHora->day = 0;
}
if($diaHora->enabled){
$aux = ["hour"=>$newhour, "enabled"=>true];
}else{
$aux = ["hour"=>$newhour, "enabled"=>false];
}
array_push($hours_array[$newday]["configs"], $aux);
}
return $hours_array;
}
这是我用于使用GMT翻译日历配置的功能之一
这是表格:
id int(10)
user_id int(10)
day int(11)
hour int(11)
enabled tinyint(1)
created_at timestamp
updated_at timestamp
表中的示例数据:
id user_id day hour enabled created_at updated_at
169 3 0 0 0 2016-07-14 09:17:32 2016-10-17 19:07:34
170 3 0 1 0 2016-07-14 09:17:33 2016-10-17 17:51:06
171 3 0 2 0 2016-07-14 09:17:33 2016-10-18 09:37:38
172 3 0 3 0 2016-07-14 09:17:33 2016-10-17 19:11:40
173 3 0 4 0 2016-07-14 09:17:33 2016-10-17 19:12:40
174 3 0 5 0 2016-07-14 09:17:33 2016-10-17 19:12:40
and more for each day/hour...
正如我之前所说,我在注册表上保存了用户的时区。并在此函数中使用它来转换为数组。但是如果我使用这种方法来翻译数组,我就不能使用PHP时区,因为它们不是GMT格式。