Laravel和MySQL日期 - 从GMT翻译到UTC

时间:2016-10-19 09:01:41

标签: php mysql laravel date

我有一个应用程序,必须管理2种日期:

  • 普通日期,可以使用PHP函数设置时区格式化,然后显示在客户端时区。
  • 我在每周7天的每一天都有一张桌子,显示工人是否能够在这一天/小时工作。此表格设置为GMT + 0。当用户进入应用程序时,我必须将此日/时表显示为其时区。

为此,我在寄存器中设置了带有偏移的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格式。

0 个答案:

没有答案