1

次のようなデータベースに存在する投稿の現在の日付を編集したいと思います。(タイプ = 日時)

たとえば、#1;

2012-12-09 22:58:15 

これは投稿値です(私はうまく取得できます)。

31/01/1980 08:20:00

次の関数を使用して日付に変換すると、「01/01/1970 01:00:00」が得られます

$date = date('d/m/Y H:i:s', strtotime($_POST['date']));

エラーが発生し続ける理由が本当にわかりません。

前もって感謝します。

4

4 に答える 4

4

strtotime が失敗し、ブール値の false を返します。これは (int)0 と見なされ、UNIX エポック: 1970 年 1 月 1 日深夜に変換されます。

マンページのノードを読んでください: http://php.net/strtotime受け入れ/理解するフォーマットについて。

...代わりにhttp://php.net/date_create_from_formatを使用してください。

于 2013-03-06T19:05:23.760 に答える
0

投稿された回答に従ってこれを試してください:

<?php
$date = new DateTime(str_replace("/", "-", $_POST['date']));
echo $date->format('d/m/Y H:i:s');
?>
于 2013-03-06T19:20:26.797 に答える
0

strtotimeから:

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

strtotime が正しく機能するには、日付を01/31/1980 08:20:00またはに変換する必要があります。31-01-1980 08:20:00

于 2013-03-06T19:08:27.417 に答える
0

あなたが抱えている問題は、strtotime の PHP マニュアルの次のメモに関連している可能性があります。

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

潜在的なあいまいさを避けるために、可能であれば ISO 8601 (YYYY-MM-DD) 日付または DateTime::createFromFormat() を使用することをお勧めします。

あなたは d/m/y を送信していますが、PHP はこれをアメリカの m/d/y 時間として明確にしています。これは、日付のスラッシュ区切りのためです。

于 2013-03-06T19:10:32.167 に答える