PHP Time()到Google日历日期时间格式
我有一个事件的开始和结束时间的PHP时间。这是一个简单的PHP Time()到Google日历日期时间格式,php,datetime,time,google-calendar-api,Php,Datetime,Time,Google Calendar Api,我有一个事件的开始和结束时间的PHP时间。这是一个简单的,用于将来某个日期的开始和结束时间。我想知道是否有人知道采用数字格式(PHP time())或表示时间的字符串值(我可以做一个strotime($sometimevalue);)并将其转换为所需的谷歌日历时间格式的方法 说够了-下面是一个时间格式的示例: 20150107T003000Z/20150107T023000Z 这相当于2015年1月6日下午5:30到2015年1月6日下午7:30 有人能给我解释一下如何将time()转换成这种
,用于将来某个日期的开始和结束时间。我想知道是否有人知道采用数字格式(PHP time())或表示时间的字符串值(我可以做一个strotime($sometimevalue);
)并将其转换为所需的谷歌日历时间格式的方法
说够了-下面是一个时间格式的示例:
20150107T003000Z/20150107T023000Z
这相当于2015年1月6日下午5:30到2015年1月6日下午7:30
有人能给我解释一下如何将time()
转换成这种格式吗?试试这个:
date_default_timezone_set('UTC');
$date = date("Ymd\THis\Z");
第一行将要使用的默认时区设置为UTC(这是格式化时间末尾的“Z:Z=“Zulu time”
)。我这样做是因为我不知道谷歌是否期待UTC时间。如果您可以使用其他时区,则可以使用
在下一行中,我使用date
格式化当前Unix时间戳(当没有时间戳传递给date
时,它默认为当前时间-即time()
)。我会为你把它拆开:
-四位数年份Y
-两位数(包括前导零,如有必要)月份m
-月份的两位数(包括前导零,如有必要)d
-文字字符\T
,它是一个分隔符,标识日期的时间部分开始。斜杠用于转义T,因为它用于显示时区缩写(例如“PST”)T
-两位数(包括前导零,如有必要)小时H
-两位数(包括前导零,如有必要)分钟i
-两位数(包括前导零,如有必要)秒s
-字面字符\Z
,表示上文讨论的祖鲁时间。斜杠用于转义T,因为它用于以秒为单位显示UTC的时区李>Z
date_default_timezone_set('UTC');
echo date("Ymd\THis\Z", time());
当前显示此结果:
20110415T014623Z
我应该注意到,您也可以使用
gmdate()
代替date()
,并且不需要调用date\u default\u timezone\u set()
,因为gmdate()
以GMT为单位返回结果。我只是不愿意提及这一点,因为我从来没有100%清楚GMT和UTC之间的差异(如果有的话),特别是其他时区/时段,如英国夏令时(BST),以及它们如何改变GMT(如果有的话)。如果有人能在评论中澄清这一点,我将不胜感激。工作解决方案取自
这要归功于鲍里斯·科罗布科夫
// 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;
}
?>
//boris在电话线上,2007年6月14日03:05
背景:
从…起
我看到
“已发布和更新的元素使用RFC 3339时间戳格式。”
我想我应该在谷歌“rfc3339 PHP”上找到一个实现这种格式的函数。虽然有点旧,但谷歌希望在ISO 8601中获得时间。例如:
$objDateTime = new DateTime('NOW');
$isoDate = $objDateTime->format(DateTime::ISO8601);
让我困惑的是,活动在1月6日举行,但时间格式显示为“20150107T”。我想它也会是
20150106T
,后面的时间是003000Z
下午5:30到023000Z
晚上7:30。我很难说出这些数字是从哪里产生的。你可以省略对time()
的调用。@deceze-你完全正确。如果省略第二个参数,date
默认为当前日期/时间。我当时用一个字符串值进行测试,我想当我更改它时,我有点发疯了。谢谢,我会更新答案的。我喜欢这个。我目前正在使用我在google上找到的javascript实现。我可以试试这个来验证它是否有效:)好的,我现在要验证它是否有效。。。我会让你知道的!不适用于新版本的PHP(7+)。此代码将不打印任何内容:“$STARTDATETIME=“2019年11月3日15:30”;echo date(“Ymd\THis\Z”,strottime($STARTDATETIME);
谢天谢地,我已经从编程php开始了。但是谢谢你的回答。