问题是,当用户提供以下格式的任何日期(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)格式返回日期
答案 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;
}