13

我有一个表格,其中以英国格式输入日期,我需要将其转换为

yyyy-mm-dd

例如输入的日期是:31/03/2013我想转换'2013-03-31'为数据库插入。

我正在使用以下仅在某些时候奇怪地起作用的东西:

$dateInput = $mysqli->real_escape_string($_POST['date']);
$show_date = date('Y-m-d', strtotime($dateInput));

有一个更好的方法吗?

4

7 回答 7

18

您可能想使用DateTime::createFromFormat

$show_date = DateTime::createFromFormat('d/m/Y', $dateInput)->format('Y-m-d');
于 2013-03-28T07:28:24.117 回答
11

尝试一下。

$dateInput = explode('/','31/03/2013');
$ukDate = $dateInput[2].'-'.$dateInput[1].'-'.$dateInput[0];
于 2013-03-28T07:30:13.897 回答
3

以下仅在某些时候奇怪地起作用:

$show_date = date('Y-m-d', strtotime($dateInput));

这是没有其他更短的方法......我一生都在使用它......直到现在还没有注意到任何奇怪的事情......检查是否还有其他事情搞砸了

其他方法是

$timestamp = strtotime(str_replace('/', '.', $dateInput));
$mysql_date = date('Y-m-d', $timestamp); 
于 2013-03-28T07:28:43.030 回答
2

试试这个 :

$dte  = '28/03/2013';
$dt   = new DateTime();
$date = $dt->createFromFormat('d/m/Y', $dte);
echo $date->format('Y-m-d');

输出:2013-03-28

于 2013-03-28T08:18:06.180 回答
1

PHP 5.3 及更高版本

使用DateTime::createFromFormat。它允许您指定一个精确的掩码 - 使用 date() 语法 - 来解析传入的字符串日期。

PHP 5.2 及更低版本

您必须使用 substr() 手动解析元素(年、月、日、小时、分钟、秒),并将结果交给mktime(),这将为您构建时间戳。

于 2013-03-28T07:29:29.643 回答
1
$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

这将起作用

于 2016-02-24T13:48:19.763 回答
0

几种替代方法。两者都输出 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];
    ?>    

方法 2 - 正则表达式

<?php
    echo ($output = preg_replace('!^([0-9]{2})/([0-9]{2})/([0-9]{4})$!',"$3-$2-$1",$input));
?>
于 2013-03-28T07:42:06.453 回答