我正在尝试将日期转换为其他格式,但是当我这样做时,我总是得到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
}
任何反馈都会很棒。
干杯
答案 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');