如何使用DateTime :: createFromFormat()获取日期?

时间:2014-06-04 06:20:32

标签: php datetime

我希望从约会开始获得日,月和年,但它不起作用。我总是收到错误:

  

致命错误:在第4行的printtest.php中调用非对象的成员函数format()

这是我的printtest.php代码。我收到了一个错误。如何解决这个问题?查看实时演示here

<?php
    $dob = $_POST['dob'];
    $date = DateTime::createFromFormat("Y-m-d", '$dob');
    $year1 = $date->format("Y");
    $day1 = $date->format("d");
    $mon3 = $date->format("m");
    echo $year1;
?>

3 个答案:

答案 0 :(得分:0)

删除dob变量周围的单引号,如Alessandro所说,但是, 根据您的示例网站,输入字段的格式为d-m-Y,您传递的格式为Y-m-d

所以改变

$date = DateTime::createFromFormat("Y-m-d", '$dob');

$date = DateTime::createFromFormat("d-m-Y", $dob);

答案 1 :(得分:0)

Try the below code to get the Year

<?php
    $dob    = $_POST['dob'];
    $date   = explode("-",$dob);
    $year1  = $date[2];
    echo $year1;
?> 

答案 2 :(得分:-1)

变量插值仅在双引号字符串中发生,因此此代码试图解析字符串&#34; $ dob&#34;作为Y-m-d日期,而不是变量$dob中包含的字符串。可以通过将DateTime::createFromFormat("Y-m-d", '$dob')更改为DateTime::createFromFormat("Y-m-d", "$dob")

来解决此问题

此外,由于您可能无法控制发布到脚本的值,因此在尝试操作其返回值之前,应检查DateTime::createFromFormat()是否返回了一个对象(在失败时返回false),例如

$date = DateTime::createFromFormat("Y-m-d", "$dob");
if (!$date)
{
   echo "Invalid dob (YYYY-mm-dd): $dob";
   exit;
}

$year1 = $date->format("Y");
$day1 = $date->format("d");
$mon3 = $date->format("m");
echo $year1;

这样一来,如果一个不能被解析为Y-m-d日期的dob被发布,你就不会得到同样的致命错误,而是更有用的#34;无效的dob&#34;消息。