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ます。ただし、4 番目の日付 (06/11/10) は として保存され2006-11-10 00:00:00ます。

試してみましdate('Y-m-d H:i:s', $date);たが、助けにはなりませんでした。

注: 私のデータベース フィールドは datetime 型です。何か案が?

4

3 に答える 3

13

あなたはdate('Y-m-d H:i:s',$date);ソリューションで正しい軌道に乗っていますが、date() 関数は日付ではなくタイムスタンプを 2 番目の引数として取ります。

あなたの例は、そのように見えるので、アメリカの日付形式であると想定しています。これを行うことができ、探している値が得られるはずです。

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 に答える