0

私の UI では、日付は次のように表示されます - dd.mm.YYYY hh:ii:ss。ユーザーは新しい日付を編集/追加することができ、おそらく SQL クエリには使用できない同じ形式 (24.06.2012 15:35:00) を使用しようとします。これが私が今までやったことです:

$dt = (date_parse_from_format("d.m.Y H:i:s", $data['event_time']));
        $newdate = sprintf("%02d-%02d-%04d %02d:%02d:%02d" , $dt['day'], $dt['month'], $dt['year'], $dt['hour'], $dt['minute'], $dt['second']);
        $test = date("Y-m-d H:i:s", strtotime($newdate));
        if ($test == "1970-01-01 01:00:00")
        {
            throw new Exception('Invalid date');
        }

何が起こるか - 小切手を残すとif ($test == "1970-01-01 01:00:00")例外が発生しますが、行と小切手をコメントする$test = date("Y-m-d H:i:s", strtotime($newdate));と、日付はゼロでのみ挿入されます。 $newdateは、SQL に適した形式のYYYY-mm-dd H:i:s文字列ですが、obv. ここで何かが恋しいです。この文字列を有効な SQL 日時として挿入する方法は?

ありがとう

レロン

4

2 に答える 2

2

DateTimeクラスは PHP 5.2 で導入され、このようなものを使用できるようになります。

$dt = DateTime::createFromFormat("d.m.Y H:i:s", $data['event_time']);
if($dt === false){
  throw new Exception("Invalid date");
}

DateTime::createFromFormatは失敗すると false を返します (このメソッドは PHP 5.3 以降でのみ使用可能です)

次に、データベースに保存するときに、次を使用して MySQL の正しい形式を取得できます。

$dt->format("Y-m-d H:i:s")
于 2012-06-22T06:03:15.430 に答える
0

MySQL は、FROM_UNIXTIME( ) および UNIX_TIMESTAMP( ) 関数を提供して、Unix タイムスタンプを MySQL 日付形式に、またはその逆に変換します。

$SqlString = "INSERT INTO table(mydate, content) VALUES (FROM_UNIXTIME($mydate), $content)";

UNIX_TIMESTAMP は、引数なしで呼び出された場合、Unix タイムスタンプ ('1970-01-01 00:00:00' UTC からの秒数) を符号なし整数として返します。UNIX_TIMESTAMP() が日付引数で呼び出された場合、引数の値を '1970-01-01 00:00:00' UTC からの秒数として返します。date は、DATE 文字列、DATETIME 文字列、TIMESTAMP、または YYMMDD または YYYYMMDD 形式の数値です。

$SqlString = "SELECT *, UNIX_TIMESTAMP($mydate) AS mydate FROM table WHERE conId = $conId";

これらの MySql 関数と mktime() 関数を詳しく見てみましょう。

于 2012-06-22T06:46:53.307 に答える