PHP转换日期

时间:2014-02-05 02:28:54

标签: php date

我正在尝试将日期转换为其他格式,但是当我这样做时,我总是得到1970-01-01。下面是我的代码的副本。

 $courseDate = $_SESSION['get_course_date']; //value returns '17/03/2014 - Standard Course'
 $regex='((?:(?:[0-2]?\\d{1})|(?:[3][01]{1}))[-:\\/.](?:[0]?[1-9]|[1][012])[-:\\/.](?:(?:[1]{1}\\d{1}\\d{1}\\d{1})|(?:[2]{1}\\d{3})))(?![\\d])'; 
 if ($c=preg_match_all ("/".$regex."/is", $courseDate, $matches)){ //use regex to get just he date
   $get_date=$matches[1][0]; // returns 17/3/2014
   echo date('Y-m-d', $get_date); // output 1970-01-01
 }

任何反馈都会很棒。

干杯

1 个答案:

答案 0 :(得分:4)

您的问题是由于date()需要将unix时间戳作为其第二个参数。你给它一个日期字符串。您可以使用strtotime()将日期转换为unix时间戳。我们还必须使用str_replace()将斜杠更改为破折号。这是因为strtotime()在看到/分隔符时默认为美国格式。通过将其更改为破折号,默认为欧洲格式:

echo date('Y-m-d', strtotime(str_replace('/', '-', $get_date)));

这是一个应该更易于管理的替代解决方案:

$string = '17/03/2014 - Standard Course';
list($date) = explode(' - ', $string);
$dt = DateTime::createFromFormat('d/m/Y', $date);
echo $dt->format('Y-m-d');

See it in action