1

XMLファイルからMySQLデータベースにデータを追加する関数をWordPressで作成しています。XMLから日付値を取得した後に問題が発生しました。これは文字列型であり、次のコードを使用して日時にフォーマットします。

$mysqlDay = date('d/m/Y',strtotime($day));

$dayXMLから取得した日付値「25/01/2013」(d / m / Y)です。そして、の値$mysqlDayは「01/01/1970」(d / m / Y)です。$mysqlDay変数の代わりに開始日の値があるのはなぜ$dayですか?文字列から日付にフォーマットしたい場合はどうすればよいですか?

上記と同様の問題で、「18:00」(H:M)のような形式の文字列を時間に変換したい場合はどうすればよいですか?

WordPressでこのコードを使用して、これらの値をデータベースに追加しました。

$wpdb->insert('wp_lps',
  array('date'=>$mysqlDay,
  'start'=> $mysqlStartTime, 
  'end'=> $mysqlEndTime),
  array('D/M/Y',
  'H:M',
  'H:M')
  );

これは正しいですか?wp_lpsは私が作成したテーブルで$mysqlStartTimeあり$mysqlEndTime、H:Mとしてフォーマットする必要があります。

4

3 に答える 3

2

代わりに DateTime を使用できます。

$mysqlDay = DateTime::createFromFormat('d/m/Y', $day);

よりエレガントで、オブジェクト指向です。

于 2013-01-25T12:50:32.190 に答える
1

私の他の答えでは、あなたが実際に尋ねた質問に答えました。ただし、(コメントで多くの議論を行った後)、これは間違った質問であることが判明しました。

状況は次のとおりです。d/m/Y 形式の日付を含む XML があります。これは SimpleXML で取得できます。これで、SimpleXML オブジェクトができました。次に、それをデータベースに取得します。

  1. オブジェクトを文字列に変換します。

    $date = (string)$date;
    
  2. 日付を、MySQL が日付として認識する形式に変換します。

    $date = date('Y-m-d', strtotime(str_replace('/', '-', $date)));
    
  3. $wpdbライブラリを使用してデータベースに日付を挿入します。

あなたの問題はいくつかの場所にありました:

  1. strtotime()私の他の回答に記載されている理由により、日付は認識できない形式でした。
  2. 日付を MySQL データベースに保存するには、日付オブジェクトが必要だという印象を受けているようです。あなたはそうしない。必要なのは、MySQL が日付として認識する形式の文字列です。コードとデータベース間のすべてのクエリは、SQL と呼ばれる言語で行われ、文字列で行われます。それを抽象化するライブラリを使用している可能性があります ( $wpdb) が、内部ではまだ文字列です。
  3. date()および/またはstrtotime()返された日付オブジェクトを考えているようです。彼らはしません。このdate()関数は文字列を返します。このstrtotime()関数は整数 (UNIX タイムスタンプ) を返します。
  4. あなたがしようとしていたのは、d/m/Y 形式の日付 (文字列) を取得し、それを UNIX タイムスタンプを表す整数に変換し、それを d/m/ 形式の日付を表す文字列に戻すことでした。 Y、それをデータベースに追加します。これは 2 つの場所で失敗していました。
    • このstrtotime()関数は、文字列にスラッシュが含まれている場合、それがアメリカ式の日付であると想定しています。
    • MySQL は実際にはその日付形式も好きではありません。Ymdが欲しい。
于 2013-01-25T20:21:45.820 に答える
0

m / d / yまたはdmy形式の日付は、さまざまなコンポーネント間のセパレーターを調べることで明確になります。セパレーターがスラッシュ(/)の場合、アメリカのm / d/yが想定されます。一方、区切り文字がダッシュ(-)またはドット(。)の場合、ヨーロッパのdmy形式が想定されます。

ドキュメントは言います。

したがって、を呼び出す前に、これらのスラッシュをハイフンに変換する必要がありますstrtotime()

于 2013-01-25T12:48:27.507 に答える