Как преобразовать дату календаря Google в полезную дату? ('20240713T011500Z')

Я получаю события календаря Google через iCal, у которых есть такая дата:

'20240713T011500Z'

Обычным функциям PHP этот формат, похоже, не нравится. Эта функция работает, но кажется довольно неуклюжей. Нет ли встроенного способа работы с этим форматом?

function convertGCalDate($gdate){
    $parts = explode('T', $gdate);
    $date  = $parts[0];
    $nums  = str_split($date);
    $date  = $nums[0].$nums[1].$nums[2].$nums[3].'-'.$nums[4].$nums[5].'-'.$nums[6].$nums[7];
    
    $time = trim($parts[1], 'Z');
    $zulu = str_ends_with($parts[1], 'Z');
    
    $nums    = str_split($time);
    $newtime = $nums[0].$nums[1].':'.$nums[2].$nums[3].':'.$nums[4].$nums[5];
    
    $dt = $date.' '.$newtime;
    
    // this is my TZ func, it works, when I finally get the dt into the right format.
    // $datetime = new DateTime($time);
    // $datetime->setTimezone($that_tz);
    // etc
    $dt = getTimeInThisTimezone($dt, $thatTZ = 'Z', $thisTZ = 'America/Los_Angeles', $outformat = null);
    
    return $dt;
    //2024-07-12 7:15 pm

}

$whatIwant =  convertGCalDate('20240713T011500Z');

Вы можете использовать Date::parseFromFormat()

Barmar 12.04.2024 23:16

Вы имели в виду DateTime::createFromFormat()?

Sammitch 12.04.2024 23:49

«Обычным функциям PHP этот формат, похоже, не нравится» — я бы сказал, что нравится :-? 3v4l.org/Tntbv

Álvaro González 13.04.2024 13:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я предполагаю, что ввод правильно проверен. Я думаю, что date() и strtotine() должны помочь.

function convertGCalDate($gdate){
return echo date('Y-m-d H:i:s',strtotime($gdate));
}

Да, мне не хватало strtotime(), спасибо, друг.

Doug Cassidy 13.04.2024 21:25

Да, тебе не нужно этого делать. Вам, вероятно, также не нужно делать то, что указано в функции getTimeInThisTimezone().

var_dump(
    $d = DateTimeImmutable::createFromFormat('Ymd\THisO', '20240713T011500Z'),
    $d2 = $d->setTimezone(new DateTimezone('America/Vancouver')),
    $d2->format('Y-m-d g:i a')
);

Выход:

object(DateTimeImmutable)#1 (3) {
  ["date"]=>
  string(26) "2024-07-13 01:15:00.000000"
  ["timezone_type"]=>
  int(2)
  ["timezone"]=>
  string(1) "Z"
}

object(DateTimeImmutable)#3 (3) {
  ["date"]=>
  string(26) "2024-07-12 18:15:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(17) "America/Vancouver"
}

string(18) "2024-07-12 6:15 pm"

Ссылка: https://www.php.net/manual/en/datetimeimmutable.createfromformat.php

Конечно, синтаксический анализ даты и времени имеет несколько канонических значений в Stack Overflow, верно?

mickmackusa 13.04.2024 00:11

Итак, createFromFormat() точнее, чем strtotime()? Strtotime() угадывает, а cFF() более прямой?

Doug Cassidy 13.04.2024 21:39

И буква О заменяет tz? Я не могу найти документы по этому поводу.

Doug Cassidy 13.04.2024 21:47

Да, strtotime() угадывает формат, и спецификатор O действительно есть в документах, на которые я ссылаюсь.

Sammitch 14.04.2024 01:05

Другие вопросы по теме