2011-04-15 129 views
4

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

够说话 - 这里是时间格式的例子:

20150107T003000Z/20150107T023000Z 

这等同于2015年1月6日下午5:30至2015年1月6日下午7:30。

那么有人可以向我解释如何将time()翻译成此格式?

+0

让我困惑的事情是,事件发生在1月6日,但时间格式表示'20150107T'。我认为它会是'20150106T'此外,下午5点30分到'023000Z'晚上7点30分是'003000Z'的时间。这很难让我知道这些数字是从哪里产生的。 – Michael 2011-04-15 01:15:19

回答

3

取自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”找到一个函数实现这种格式

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(如果有的话)。如果有人能够在评论中澄清这一点,我会非常感激。

+0

你可以在这里忽略'time()'的调用。 – deceze 2011-04-15 01:58:22

+0

@deceze - 你是对的。如果省略第二个参数,则“日期”默认为当前日期/时间。我在那里测试了一个字符串值,当我改变它时,我想我有一个脑袋。谢谢,我会更新答案。 – AgentConundrum 2011-04-15 02:01:39

+0

嗯。我喜欢这个。我目前正在使用我在google上发现的一个JavaScript实现。我可以试试这个来验证它的工作:) – Michael 2011-04-15 20:50:33

1

这是有点老,但谷歌希望得到的时间在ISO 8601实例:

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

SOURCE

+0

谢天谢地,我已经从编程的PHP :)开始了。但谢谢你的答案。 – Michael 2016-11-03 17:41:24