日期在mysql中插入as 0000-00-00 00:00:00

时间:2013-06-12 23:30:28

标签: php mysql

我的$date输出位于foreach循环中

  

09/25/11,02/13/11,09/15 / 10,06 / 11 / 10,04 / 13/10,04/13/10,04/13/10,   09/24/09,02/19/09,12/21/08

我的mysql查询(PHP)如下

("INSERT INTO table_name(`field1`, `field2`,`date`) VALUES ('".$value1."','".$value2 ."','".$date."')");

问题:在我的数据库中,所有日期都存储为0000-00-00 00:00:00。但第4个日期(06/11/10)存储为2006-11-10 00:00:00

我尝试了date('Y-m-d H:i:s', $date);但没有帮助。

注意:我的数据库字段是datetime类型。 有什么想法吗?

3 个答案:

答案 0 :(得分:12)

您使用date('Y-m-d H:i:s',$date);解决方案正确,但date()函数将时间戳作为其第二个参数,而不是日期。

我假设您的示例采用美国日期格式,因为它们看起来就是这样。你可以这样做,它应该为你提供你正在寻找的价值:

date('Y-m-d H:i:s', strtotime($date));

它无法正常工作的原因是它希望日期采用YYYY-MM-DD格式,并尝试评估您的数据。但你有MM / DD / YY,这让人感到困惑。 06/11/10示例是唯一一个可以被解释为您的示例中的有效YYYY-MM-DD日期的示例,但PHP认为您的意思是06作为年份,11表示月份,10表示当天。

答案 1 :(得分:1)

我为此目的创建了自己的功能,可能对您有所帮助:

function getTimeForMysql($fromDate, $format = "d.m.y", $hms = null){
    if (!is_string($fromDate))  
        return null ;       
    try {
        $DT = DateTime::createFromFormat($format, trim($fromDate)) ;
    } catch (Exception $e) { return null ;}

    if ($DT instanceof DateTime){
        if (is_array($hms) && count($hms)===3)
             $DT->setTime($hms[0],$hms[1],$hms[2]) ;
        return ($MySqlTime = $DT->format("Y-m-d H:i:s")) ? $MySqlTime : null ;
    }
    return null ;
}

因此,在您的情况下,您使用格式m/d/yy

$sql_date = getTimeForMysql($date, "m/d/yy") ;
if ($sql_date){
  //Ok, proceed your date is correct, string is returned.
}

答案 2 :(得分:0)

您的日期没有世纪,请尝试将其转换为:

<?php
$date = '09/25/11';
$date = DateTime::createFromFormat('m/d/y', $date);
$date = $date->format('Y-m-d');
print $date;

打印:

2011-09-25

现在你可以在MySQL中插入$ date。