将m / d / y(01/1/2001示例)字符串存储为DATE

时间:2013-04-27 16:55:37

标签: php mysql string date date-format

当我尝试SELECT CAST('01/1/2001' AS DATE)时,它总是返回NULL(作为我不能让它工作的一个例子)。我正在尝试INSERT以这种格式创建的数据。

如何在DATE列中存储此格式的日期?

请注意,如果日期小于0,则该日期永远不会有前缀10

5 个答案:

答案 0 :(得分:1)

你可以像这样使用MySQL函数STR_TO_DATE()

STR_TO_DATE('01/1/2012',  '%d/%m/%Y')

当然,根据您的需要编辑格式。

答案 1 :(得分:1)

只需使用此代码

 $date="01/1/2013";

date('Y-m-d',strtotime($date))

答案 2 :(得分:0)

您不希望以该格式存储它。这种方式不是很有用,以后当你需要做更多事情然后阅读它时你会后悔。

将其存储为date数据类型...

$date = DateTime::createFromFormat("d-j-Y","01/1/2001"); 
$new_format = $date->format("Y-m-d"); // 2001-01-01

...然后在选择时格式化它:

 SELECT DATE_FORMAT(`date`, "%m/%l/%Y") AS date // 01/1/2001

答案 3 :(得分:0)

这可能不是一个很好的答案,但如果你知道确切的顺序(d / m / Y),你可以按如下方式进行:

list($month,$day,$year) = explode("/","01/1/2013");
$date = $year."-".str_pad($month,2,"0", STR_PAD_LEFT)."-".str_pad($day,2,"0",STR_PAD_LEFT);

然后,您可以安全地使用MySQL日期格式进行比较和一般检查,而不是使用VARCHAR进行伪比较。不仅如此,您还可以将DATETIME作为索引受益。

答案 4 :(得分:-1)

这是一种简单的方法:

list($month, $day, $year) = explode("/","01/1/2013");
$time = mktime(0,0,0,intval($month),intval($day),intval($year));
$date_format = date("Y-m-d", $time);