5

我的$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. 但是第四个日期(06/11/10)存储为2006-11-10 00:00:00.

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

注意:我的数据库字段是日期时间类型。任何想法?

4

3 回答 3

13

您的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 作为日期。

于 2013-06-12T23:34:59.363 回答
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 ;
}

所以在你的情况下,你使用 format m/d/yy

$sql_date = getTimeForMysql($date, "m/d/yy") ;
if ($sql_date){
  //Ok, proceed your date is correct, string is returned.
}
于 2013-06-12T23:32:53.623 回答
0

您的日期中没有世纪,请尝试像这样转换它:

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

印刷:

2011-09-25

现在您可以将 $date 插入 MySQL。

于 2013-06-12T23:38:56.520 回答