Время PHP () в формате даты календаря Google - PullRequest
4 голосов
/ 15 апреля 2011

У меня есть время PHP для времени начала и окончания события. Это просто <?php time(); ?> для времени начала и окончания будущей даты. Мне было интересно, знает ли кто-нибудь, как взять числовой формат (время PHP) () или взять строковое значение, представляющее это время (я мог бы сделать strtotime($sometimevalue);), и преобразовать его в нужный формат времени Календаря Google.

Хватит говорить - вот пример формата времени:

20150107T003000Z/20150107T023000Z

Это соответствует 6 января 2015 года в 17:30 по 6 января 2015 года в 19:30.

Так может кто-нибудь объяснить мне, как перевести time() в этот формат?

Ответы [ 3 ]

5 голосов
/ 06 июля 2011

Рабочий раствор взят из http://php.net/manual/en/function.date.php Кредит идет Борису Коробкову.

// boris at psyonline dot ru 14-Jun-2007 03:05

<?php

/**
 * Get date in RFC3339
 * For example used in XML/Atom
 *
 * @param integer $timestamp
 * @return string date in RFC3339
 * @author Boris Korobkov
 */
function date3339($timestamp=0) {

    if (!$timestamp) {
        $timestamp = time();
    }
    $date = date('Y-m-d\TH:i:s', $timestamp);

    $matches = array();
    if (preg_match('/^([\-+])(\d{2})(\d{2})$/', date('O', $timestamp), $matches)) {
        $date .= $matches[1].$matches[2].':'.$matches[3];
    } else {
        $date .= 'Z';
    }
    return $date;
}

?>

Справочная информация: От http://www.ibm.com/developerworks/opensource/library/os-php-xpath/ Я видел «Опубликованные и обновленные элементы используют формат меток времени RFC 3339.»

И решил, что я должен Google "rfc3339 PHP", чтобы найти функцию, которая реализует этот формат

5 голосов
/ 15 апреля 2011

Попробуйте это:

date_default_timezone_set('UTC');
$date = date("Ymd\THis\Z");

В первой строке устанавливается часовой пояс по умолчанию, который будет использоваться в формате UTC (это «Z» в конце форматированного времени: Z = "Zulu Time").Я сделал это, так как не знаю, ожидает ли Google время по Гринвичу или нет.Если вы можете использовать другие часовые пояса, тогда вы можете использовать один из других доступных форматов часовых поясов .

В следующей строке я использую date для форматирования текущей метки времени Unix (когда нетотметка времени передается в date, по умолчанию используется текущее время - т.е. time()).Я разбью его на части для вас:

  • Y - год из четырех цифр
  • m - месяц из двух цифр (включая ведущий ноль, если необходимо)
  • d - двухзначный (включая ведущий ноль, если необходимо) день месяца
  • \T - буквенный символ T, который является разделителем, обозначающим, чтоВременная часть даты начинается.Косая черта должна выходить за пределы буквы Т, так как она используется для отображения аббревиатуры часового пояса (например, «PST»)
  • H - двухзначный (включая, при необходимости, нулевой) час
  • i - двузначная (включая начальный ноль, если необходимо) минута
  • s - двузначная (включая начальный ноль, если необходимо) секунда
  • \Z - буквенный символ Z, указывающий время зулу, как обсуждалось выше.Косая черта должна выходить из Т, так как в противном случае она используется для отображения часового пояса в секундах от UTC.

Для справки, и чтобы быть уверенным, что я правильно истолковал вопрос, этот код:

date_default_timezone_set('UTC');
echo date("Ymd\THis\Z", time());

В настоящее время отображает этот результат:

20110415T014623Z

Я долженобратите внимание, что вы также можете использовать gmdate() вместо date() и устранить необходимость в вызове date_default_timezone_set(), так как gmdate() возвращает результат в GMT.Я только стесняюсь упомянуть об этом, потому что я никогда не был на 100% ясен о разнице, если таковая вообще имеется, между GMT и UTC, особенно с другими часовыми поясами / периодами, такими как BST (British Summer Time) и как они изменяют GMT, если вообще.Если бы кто-то мог уточнить это в комментариях, я был бы очень признателен.

2 голосов
/ 31 октября 2016

Это немного старовато, но Google ожидает получить время в ISO 8601. Пример:

$objDateTime = new DateTime('NOW');
$isoDate = $objDateTime->format(DateTime::ISO8601);

ИСТОЧНИК

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