php POST 数据到日期时间


php POST data to datetime

我的项目有问题。我想创建一个.ics文件,其开始和结束时间由网站用户定义。所以我得到了一个开始和结束年份以及开始/结束时间的字符串。现在我想从这些数据创建一个DateTime对象。我的问题是我只是从现在获取时间戳,而不是从创建的字符串中获取时间戳:

$eventStartDay    = $_POST["eventStartDay"];
$eventStartMonth  = $_POST["eventStartMonth"];
$eventStartYear   = $_POST["eventStartYear"];
$eventStartHour   = $_POST["eventStartHour"];
$eventStartMinute = $_POST["eventStartMinute"];
$eventStartSecond = $_POST["eventStartSecond"];
$startDateTime    = $eventStartYear . "-" . $eventStartMonth . "-" 
                  . $eventStartDay . "T" . $eventStartHour . ":" 
                  . $eventStartMinute . ":" . $eventStartSecond . "+01:00";
$eventEndDay    = $_POST["eventEndDay"];
$eventEndMonth  = $_POST["eventEndMonth"];
$eventEndYear   = $_POST["eventEndYear"];
$eventEndHour   = $_POST["eventEndHour"];
$eventEndMinute = $_POST["eventEndMinute"];
$eventEndSecond = $_POST["eventStartSecond"];
$endDateTime    = $eventEndYear . "-" . $eventEndMonth . "-" 
                . $eventEndDay . "T" . $eventEndHour . ":" 
                . $eventEndMinute . ":" . $eventEndSecond . "+01:00";
$cal = new SimpleICS();
$cal->addEvent(function($e) {
  $e->startDate = new DateTime($startDateTime);
  $e->endDate   = new DateTime($endDateTime);

我用 var_dump() 检查了字符串,得到了正确的答案。它们应如下所示:"2016-01-18T19:00:00+01:00"

引用关于匿名函数的PHP手册:

闭包也可以从父作用域继承变量。任何此类变量都必须传递给 use 语言构造。

所以你需要关闭日期时间对象,例如你需要做

$cal->addEvent(function($e) use ($startDateTime, $endDateTime) {
  $e->startDate = new DateTime($startDateTime);
  $e->endDate   = new DateTime($endDateTime);
}