从用户提供的字符串中获取日期时间对象

时间:2018-08-21 10:00:24

标签: php

问题是,当用户提供以下格式的任何日期(dd-mm-yyyy,yyyy-mm-dd)作为(yyyy-mm-dd)时,从字符串获取datetime对象。我的功能如下:

public function dateOfBirth($date){
    $date_format = strtotime($date);
    $result = new \DateTime('@'.$date_format);
}

当用户以(yyyy-mm-dd)格式提供日期时,成功返回日期为(yyyy-mm-dd),但当用户以(dd-mm-yyyy)格式提供日期时,返回以下错误

DateTime::__construct(): Failed to parse time string (@) at position 0 (@): Unexpected character

当用户输入上述任何格式时,我都需要以(yyyy-mm-dd)格式返回日期

5 个答案:

答案 0 :(得分:0)

尝试以下代码:

function getFormattedDate($date)
{
    $dateObj = new DateTime($date);

    return $dateObj->format('Y-m-d');
}

调用函数:

print_r(getFormattedDate('23-12-2017'));
print_r(getFormattedDate('2016-02-20'));
print_r(getFormattedDate('15-05-2018'));

答案 1 :(得分:0)

$one = new \DateTime('2018-08-12');
$two = new \DateTime('12-08-2018');
var_dump($one, $two);
php 5.6+中的

都是有效的DateTime对象。现在,您可以按所需格式返回它

$one->format('Y-m-d'); // echoes 2018-08-12
$two->format('Y-m-d'); // echoes 2018-08-12

答案 2 :(得分:0)

此代码对我有用,谢谢大家的答复,

public function dateOfBirth($date){
    $date_format = strtotime($date);
    $result = (new \DateTime())->setTimestamp($date_format);
}

答案 3 :(得分:-1)

您可以如下组合使用date()DateTime

public function formatDate($date){
    $dateObj = new DateTime(date($date));

    return $dateObj->format('Y-m-d');
}

答案 4 :(得分:-2)

    $in1 = '2018-08-20';
    $in2 = '20-08-2018';
    print_r(userDate($in1)); // 2018-08-20
    print_r(userDate($in2)); // 2018-08-20
    print_r(userDate(time())); // 2018-08-20

    function userDate($date)
    {
        if ($result = \DateTime::createFromFormat('Y-m-d', $date)) return $result->format('Y-m-d');
        if ($result = \DateTime::createFromFormat('d-m-Y', $date)) return $result->format('Y-m-d');
        // ...
        $dt = new \DateTime();
        if ($result = $dt->setTimestamp($date)) return $result->format('Y-m-d');
        return null;
    }