Как перевести данные из файла json в даты недели в php? - PullRequest
0 голосов
/ 25 мая 2020

в настоящее время у меня есть этот набор данных, полученных из 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 - 19:00 Пн - Чт: 06:00 - 22:00 Пт: 06:00 - 20:30

В настоящее время мне приходится жестко кодировать все даты, а затем извлекать время только из JSON. Интересно, кто-нибудь может мне помочь:

1) Перевести dayID -> Monday, Tuesday, et. c ...

2) Отобразить данные позже так же, как я жестко кодирую даты.

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

В вашем первом вопросе, как получить день к 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);

, и это не помешает вашей существующей структуре массива;

Во втором вопросе, как преобразовать ваши StartTime и EndTime в этот формат Сб, Вс: 08:30 - 19:00. Вы можете сделать так:

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);
} 

Надеюсь, это решит вашу проблему.

0 голосов
/ 25 мая 2020

Для вашего первого вопроса вы можете просто иметь массив дней:

$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');

Сгруппировать их в соответствии с вашими предпочтениями - задача не из легких для автоматизации, вам придется сгруппировать их по дню, времени и количеству повторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...