PHP时间()到Google日历日期时间格式

时间:2011-04-15 01:11:28

标签: php datetime time google-calendar-api

我有一段时间用于事件的开始和结束时间。对于未来某个日期的开始和结束时间,这是一个简单的<?php time(); ?>。我想知道是否有人知道如何采用数字格式(PHP时间())或采用代表该时间的一些字符串值(我可以做strtotime($sometimevalue);)并将其转换为所需的Google日历时间格式

足够说话 - 这是时间格式的一个例子:

20150107T003000Z/20150107T023000Z

这相当于2015年1月6日下午5:30至2015年1月6日晚上7:30。

有人可以向我解释如何将time()翻译成这种格式吗?

3 个答案:

答案 0 :(得分:5)

试试这个:

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

第一行设置用作UTC的默认时区(这是格式化时间结束时的“Z”:Z = "Zulu Time")。我之所以这样做是因为我不知道Google是否期待UTC时间。如果您可以使用其他时区,则可以使用one of the other timezone formats available

在下一行中,我使用date格式化当前的Unix时间戳(当没有时间戳传递给date时,它默认为当前时间 - 即time())。我会为你分开它:

  • Y - 四位数年份
  • m - 两位数(包括前导零,如有必要)月
  • d - 当月的两位数(包括必要的前导零)
  • \T - 文字字符T,它是一个分隔符,用于标识日期的时间部分开始。斜线是为了逃避T,因为它用于显示时区缩写(例如“PST”)
  • H - 两位数(包括前导零,如有必要)小时
  • i - 两位数(包括前导零,必要时)分钟
  • s - 两位数(包括前导零,如有必要)第二
  • \Z - 字面字符Z,表示如上所述的祖鲁时间。斜杠是为了逃避T,因为它用于以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(英国夏令时)以及它们如何改变GMT(如果有的话)。如果有人可以在评论中澄清这一点,我将非常感激。

答案 1 :(得分:5)

取自http://php.net/manual/en/function.date.php的工作解决方案 归功于Boris Korobkov。

// 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时间戳格式。”

并认为我应该谷歌“rfc3339 PHP”来找到实现这种格式的功能

答案 2 :(得分:1)

它有点旧,但Google希望在ISO 8601中获得时间。例如:

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

SOURCE