PHP-从UNIX到iCal的格式化日期

PHP-从UNIX到iCal的格式化日期,php,date,icalendar,strtotime,Php,Date,Icalendar,Strtotime,我正在尝试将存储的日期2013-04-23 19:00格式化为iCal格式:20130423T19000。 以下是我试图做到这一点的方式: $start = strtotime($event["event_start"]); $start = date('Ymd\THis',$start); 此代码返回19691231T190000 我认为,由于起始字符串缺少秒,这可能是问题所在,但在尝试$start=strottime($event[“event_start”]。“:00”)我已经排除了这种

我正在尝试将存储的日期
2013-04-23 19:00
格式化为iCal格式:
20130423T19000
。 以下是我试图做到这一点的方式:

$start = strtotime($event["event_start"]);
$start = date('Ymd\THis',$start);
此代码返回
19691231T190000

我认为,由于起始字符串缺少秒,这可能是问题所在,但在尝试
$start=strottime($event[“event_start”]。“:00”)我已经排除了这种可能性。

试试这个:

$str = "DTSTART;TZID=<your timezone>:".date('Ymd', strtotime($start));
$str=“DTSTART;TZID=:”.date('Ymd',strottime($start));
见:


你似乎遗漏了什么。 您确定已填充$event[“event_start”]吗

date('Ymd\THis',strtotime('2013-04-23 19:00')) == 20130423T190000

date('Ymd\THis',strtotime('')) == 19691231T190000
检查$event[“event_start”]的值

编辑: 暗示是1969年与1970年的UNIX时代有点接近


从marc b->差异在于UTC+5的时区与事件开始“缺失”秒无关。strotime返回unix时间戳,即自1970年1月1日午夜以来的秒数。从该时间戳生成的任何格式化日期中,您都会得到秒数,即使它们始终是
:00
。因此,无论是否有秒,
strotime()
都会返回相同的值。只要您输入strotime的格式是它可以理解的,您就会从中得到“秒”值。该值始终具有隐式秒数,因为它是以秒数表示的。将其格式化为h:m:s格式只会使:s显示为零。e、 g.strotime(“7pm”)永远不会转移到(比如)7:00:01,因为:01不在时间值中。理解,谢谢。那么,
2013-04-23 19:00
是一种
strotime()
可以理解的格式吗?是的,它确实意味着事件启动没有被正确解析。strotime返回一个布尔值false表示失败,当您将它传递到date()时,PHP会将其类型转换为int 0。时间戳0是UTC 1970年1月1日午夜,所以您的系统是UTC+5,因此是1969年12月31日。我喜欢这个想法。。。我会检查一下。对编辑的评论:是的,Marc B解释了为什么它会输出
19691231T190000
(因为我的时区是UTC+5)。编辑以反映所有信息