1

これは実際にはこの質問からのフォローアップの質問ですが、まったく別の問題を提示しています。また、かなり紛らわしいことも承知していますので、ご容赦ください。

私は次のような日付を持っています1/04/2013:Jan 04 2013

前述の質問では、時刻形式に時間と分をランダムに追加する必要がありましたが、それは本来の目的で機能します。

$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));

これは次のようなものを生成しました: 2013-05-01 08:57:00

問題は、システムがその日付を..MAY 1stではなくJAN 05..と見なすことです。

これらの投稿を自動的に挿入すると(wp)-日付が次のようなすべての投稿が2012-05-28DBに挿入されます1970-01-01(これはphpのデフォルトの「間違った日付」形式であると思います..28月はもちろんエラーです. . )

から日月を変更しようとしました

$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));

$clr_datenew = date('Y-d-m ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));

ただし、日付の組み合わせが異なると同じエラーが発生します。

同僚が私に次のヒントをくれた後:

strtotime は、z が 4 桁か 2 かによって、x/y/z を mm/dd/yy[yy] と解釈し、xyz を dd-mm-yyyy または yy-mm-dd と解釈します。

私も試しました:

date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime(str_replace('/','-',$clr_date)));

私はここで本当に頭がおかしくなっています:-)

これは、関数が大まかに「人間の」形式に基づいて時間をフォーマットする方法を実際に「推測」する strtotime() を使用しているためだと思います。

元の日付形式と必要な変換形式の両方を指定しながら、日付をある日付から別の日付に変換する機能はありますか??

dummy_function($origformat,$wantedformat)指定できる場所のようなものdummy_function('Y-d-m','Y-m-d')

EDIT I @harkeのコメントを読んだ後、何かが私にトリガーされ、それを@Maks3wの回答と組み合わせると、私のために機能している形式は次のようになります。

$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime(str_replace('/','-',$clr_date)));

その特定の会社の(内部)サーバーがより低いバージョンを実行しているため、Php 5.3 +メソッドは私にはあまり関係がないため、確認できませんでした..

DB デザイナー/プログラマーのすべての掲示板に投稿する必要がある少し余分なもの: http://xkcd.com/1179/

つまり、追って通知があるまで:-)

4

3 に答える 3

1
$date=date_format(date_create($clr_datenew), 'Y-m-d H:i:s');
于 2013-03-31T10:28:36.183 に答える
1
  1. 1 つの内部時間表現を決定し、それに固執します。できれば、多くのシステムで標準となっているものを選択してください。m/d/yはそのような標準ではありません(多くのアメリカ人が考えたいことにもかかわらず ;P)。事実上、普遍的な標準はY-m-d H:i:s(関数の書式文字列として表されますdate()) です。ほとんどのデータベースはこの形式を想定しており、時間関連の関数は常にその形式をあいまいさなく解析できます。

  2. 上記は、異なるシステム間で互換性のある便利な日付のテキスト表現ですが、内部的には、より柔軟なタイプ ( UNIX タイムスタンプまたはDateTimeオブジェクト) で日付を表すことが理にかなっています。どちらかを選択し、すべての日付をその形式でコード内に内部的に保持します。どちらも時間値を簡単に操作できます。日付をユーザーに表示する必要がある場合、または日付を文字列として別のシステムに送信する必要がある場合 (つまり、データベースに挿入する場合) にのみ、文字列に戻してください。m/d/y文字列から UNIX タイムスタンプ、文字列への変換を行ったり来たりしないでくださいd/m/y

  3. 既知の形式の日付を UNIX タイムスタンプまたはDateTimeオブジェクトに解析して後で別の形式に変換するにはDateTime::createFromFormat、最近の PHP バージョン (5.3+) またはそれ以前のバージョンで使用し、strptimeその後手動で再構築します。

于 2013-03-31T10:05:48.340 に答える
1

の最初の引数date()は、各文字をバックスラッシュでエスケープする必要がある印刷リテラルのフォーマット マスクです。\

$clr_datenew = date('Y-m-d ' . preg_replace('/(.)/', '\\\$1', sprintf('\%d\%d\:\%d\%d\:00', mt_rand(0, 23), mt_rand(0, 59))), strtotime($date));
于 2013-03-31T10:01:29.043 に答える