Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Time()到Google日历日期时间格式_Php_Datetime_Time_Google Calendar Api - Fatal编程技术网

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

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时间。这是一个简单的
,用于将来某个日期的开始和结束时间。我想知道是否有人知道采用数字格式(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
    ,它是一个分隔符,标识日期的时间部分开始。斜杠用于转义T,因为它用于显示时区缩写(例如“PST”)
  • H
    -两位数(包括前导零,如有必要)小时
  • i
    -两位数(包括前导零,如有必要)分钟
  • s
    -两位数(包括前导零,如有必要)秒
  • \Z
    -字面字符
    Z
    ,表示上文讨论的祖鲁时间。斜杠用于转义T,因为它用于以秒为单位显示UTC的时区
为了便于参考,并确保我准确地解释了问题,以下代码:

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开始了。但是谢谢你的回答。