我有一个表单,其中输入的日期格式为英国格式,我需要将其转换为
yyyy-mm-dd
例如,输入的日期是:31/03/2013
,我想将其转换为'2013-03-31'
以进行数据库插入。
我正在使用以下代码,但令人惊奇的是它有时候只能工作:
$dateInput = $mysqli->real_escape_string($_POST['date']);
$show_date = date('Y-m-d', strtotime($dateInput));
有没有更好的方法来做这件事?
你可能想要使用 DateTime :: createFromFormat :
$show_date = DateTime::createFromFormat('d/m/Y', $dateInput)->format('Y-m-d');
date_parse_from_format
返回的是array
,而date
函数需要一个整数作为第二个输入。 - Voitcus试一下。
$dateInput = explode('/','31/03/2013');
$ukDate = $dateInput[2].'-'.$dateInput[1].'-'.$dateInput[0];
$show_date = date('Y-m-d', strtotime($dateInput));
没有比这更短的方法来完成它......我一直使用这种方法,直到现在,没有发现任何奇怪的事情发生.....请检查是否有其他东西搞乱了它。
另一种方法是:
$timestamp = strtotime(str_replace('/', '.', $dateInput));
$mysql_date = date('Y-m-d', $timestamp);
试一下这个:
$dte = '28/03/2013';
$dt = new DateTime();
$date = $dt->createFromFormat('d/m/Y', $dte);
echo $date->format('Y-m-d');
输出: 2013-03-28
$date_array = explode("/",$your_date); // split the array
$var_day = $date_array[0]; //day seqment
$var_month = $date_array[1]; //month segment
$var_year = $date_array[2]; //year segment
echo $new_date_format = "$var_year-$var_day-$var_month"; // join them together
PHP 5.3及以上版本
使用DateTime::createFromFormat。它允许您指定一个确切的掩码 - 使用date()语法 - 来解析传入的字符串日期。
PHP 5.2及以下版本
您需要使用substr()手动解析元素(年、月、日、小时、分钟、秒),并将结果传递给mktime()来构建时间戳。
strtotime()
。 - ulentini几种替代方法。两种都输出2013-03-31:
方法1 - “看吧,没有函数”
<?php
$in = '31/03/2013';
echo $in[6].$in[7].$in[8].$in[9].'-'.$in[3].$in[4].'-'.$in[0].$in[1];
?>
方法二 - 正则表达式
<?php
echo ($output = preg_replace('!^([0-9]{2})/([0-9]{2})/([0-9]{4})$!',"$3-$2-$1",$input));
?>
strtotime()
之前,您必须重新排列它(如果需要)。https://dev59.com/P2855IYBdhLWcg3wvnOE - Tushar