【问题标题】:How to translate data from json file to dates of week in php?如何将json文件中的数据转换为php中的星期几?
【发布时间】:2020-05-25 20:08:25
【问题描述】:

目前我从 API 获取了这组数据

array(7) {
  [0]=>
  array(4) {
    ["LocationId"]=>
    string(36) "da4f4609-d76b-41f0-a517-ca525d71c914"
    ["DayId"]=>
    int(4)
    ["StartTime"]=>
    string(19) "2019-04-15T06:00:00"
    ["EndTime"]=>
    string(19) "2019-04-15T22:00:00"
  }
  [1]=>
  array(4) {
    ["LocationId"]=>
    string(36) "da4f4609-d76b-41f0-a517-ca525d71c914"
    ["DayId"]=>
    int(1)
    ["StartTime"]=>
    string(19) "2019-04-15T06:00:00"
    ["EndTime"]=>
    string(19) "2019-04-15T22:00:00"
  }
  [2]=>
  array(4) {
    ["LocationId"]=>
    string(36) "da4f4609-d76b-41f0-a517-ca525d71c914"
    ["DayId"]=>
    int(5)
    ["StartTime"]=>
    string(19) "2019-04-15T06:00:00"
    ["EndTime"]=>
    string(19) "2019-04-15T20:30:00"
  }
  [3]=>
  array(4) {
    ["LocationId"]=>
    string(36) "da4f4609-d76b-41f0-a517-ca525d71c914"
    ["DayId"]=>
    int(2)
    ["StartTime"]=>
    string(19) "2019-04-15T06:00:00"
    ["EndTime"]=>
    string(19) "2019-04-15T22:00:00"
  }
  [4]=>
  array(4) {
    ["LocationId"]=>
    string(36) "da4f4609-d76b-41f0-a517-ca525d71c914"
    ["DayId"]=>
    int(6)
    ["StartTime"]=>
    string(19) "2019-04-15T08:30:00"
    ["EndTime"]=>
    string(19) "2019-04-15T19:00:00"
  }
  [5]=>
  array(4) {
    ["LocationId"]=>
    string(36) "da4f4609-d76b-41f0-a517-ca525d71c914"
    ["DayId"]=>
    int(0)
    ["StartTime"]=>
    string(19) "2019-04-15T08:30:00"
    ["EndTime"]=>
    string(19) "2019-04-15T19:00:00"
  }
  [6]=>
  array(4) {
    ["LocationId"]=>
    string(36) "da4f4609-d76b-41f0-a517-ca525d71c914"
    ["DayId"]=>
    int(3)
    ["StartTime"]=>
    string(19) "2019-04-15T06:00:00"
    ["EndTime"]=>
    string(19) "2019-04-15T22:00:00"
  }
}

对于 DayId,0 是星期日,1 是星期一,依此类推。最终结果是这样的

周六、周日:08:30 AM - 07:00 PM 周一至周四:06:00 AM - 10:00 PM 周五:06:00 AM - 08:30 PM

目前,我必须对所有日期进行硬编码,然后仅从 JSON 中提取时间。我想知道有人可以帮助我:

1) 翻译 dayID -> 星期一、星期二等...

2) 之后显示数据的方式与我硬编码日期的方式相同。

非常感谢任何帮助!

【问题讨论】:

  • 您希望 dayId 仅是 Days 名称还是 Sat、Sun:08:30 AM - 07:00 PM 那样?
  • 嗨 Hashemi,感谢您对此进行调查。我希望能够将 dayID 翻译为日期名称是的。因此,如果我从 json 中获得 dateID = 0,我可以以某种方式将其转换为星期日,然后在网站上显示星期日。

标签: php arrays json wordpress


【解决方案1】:

对于您的第一个问题,您可以简单地有一组天数:

$days = [
    'Sun',
    'Mon',
    'Tue',
    'Wed',
    'Thu',
    'Fri',
    'Sat'
];

$day = $days[0];

对于您的第二个问题,对于日期本身,如果这些是您从 API 收到的日期,您可以使用 DateTime 转换它们:

$startTime = new \DateTime($data['StartTime']);
$endTime = new \DateTime($data['EndTime']);

echo $startTime->format('h:i A') . ' - ' . $endTime->format('h:i A');

根据您的喜好对它们进行分组自动化并不是一件容易的事,您必须按日期、时间和发生次数对它们进行分组。

【讨论】:

    【解决方案2】:

    在您的第一个问题中,如何通过DayId 获得一天,您可以这样做:

    $mapDay = [
        0 => "Sunday",
        1 => "Monday",
        2 => "Tuesday",
        3 => "Wednesday",
        4 => "Thursday",
        5 => "Friday",
        6 => "Saturday"
    ];
    
    $array = array_map(function($item) use ($mapDay) {
        $item['DayId'] = $mapDay[$item['DayId']];
        return $item;
    }, $array);
    

    这不会妨碍您现有的数组结构;

    在您的第二个问题中,如何将您的 StartTimeEndTime 转换为这种格式周六、周日:08:30 AM - 07:00 PM。你可以这样做:

    function transformDateToString($startTime, $endTime) {
        $start = strtotime($startTime);
        $end = strtotime($endTime);
    
        $startDay = date('D', strtotime($start));
        $endDay = date('D', strtotime($end));
    
        $startHour = date('h:i A', strtotime($start));
        $endHour = date('h:i A', strtotime($end));
    
        return sprintf("%s,%s %s - %s", $startDay, $endDay, $startHour, $endHour);
    } 
    

    希望它能解决您的问题。

    【讨论】:

      猜你喜欢
      • 2016-01-05
      • 2021-09-29
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2022-09-23
      • 1970-01-01
      相关资源
      最近更新 更多