我有一段时间用于事件的开始和结束时间。对于未来某个日期的开始和结束时间,这是一个简单的<?php time(); ?>
。我想知道是否有人知道如何采用数字格式(PHP时间())或采用代表该时间的一些字符串值(我可以做strtotime($sometimevalue);
)并将其转换为所需的Google日历时间格式
足够说话 - 这是时间格式的一个例子:
20150107T003000Z/20150107T023000Z
这相当于2015年1月6日下午5:30至2015年1月6日晚上7:30。
有人可以向我解释如何将time()
翻译成这种格式吗?
答案 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);