0

こんにちは、私は以下のように日付変換を使用しています

$startdate='12/10/2012'; 
$newstartdate = date('Y-m-d',strtotime($startdate));

動作する場合もあるが、1970-01-01と表示される場合もある

例: 12/10/2012 は動作します 13/10/2012 は動作しません ショー 1970-01-01

4

6 に答える 6

5

PHP の日付と時刻の形式のページ を参照してください

文字を使用/して日付を区切る場合、それは として扱われmm/dd/yyます。年は 12 か月しかありません。

適切な順序で日付を表示するには、ハイフン文字を使用してください。

$startdate='12-10-2012';
$newstartdate = date('Y-m-d',strtotime($startdate));
于 2012-10-15T10:05:27.203 に答える
2

DateTime::createFromFormatを使用して、日付形式を指定します。

$date = DateTime::createFromFormat('d/m/Y', '13/10/2012');
echo $date->format('Y-m-d');
于 2012-10-15T10:06:11.297 に答える
1

マニュアルから:The function expects to be given a string containing an English date format...

「英語」形式の日付13/10/2012(ドキュメントはこれについて間違っています。「US American」と表示する必要があります) は、13 番目の月の 10 日を意味します。13 番目の月はグレゴリオ暦には存在しないためstrtotime、失敗結果 0 が返されます。これを Unix タイムスタンプとして使用すると、1970-01-01 に変換されます。

strftime異なる形式の日付を処理するために使用します。

于 2012-10-15T10:06:43.287 に答える
1

これはおそらく、PHP が "12/10/2012" を 2012 年 12 月 10 日 (問題ありません) と想定し、"13/10/2012" を未定義の月の 10 日と想定しているため、適切に計算できないためです。 .

于 2012-10-15T10:06:55.237 に答える
-1

上記の日付クラスとリンクに従って出力をレンダリングしますが、それでも使用法に固執している場合は、この方法で試してみてください (PHP でさらに調べるための学習方法ですが、これは非常に悪いコードです :P )

$startdate1='13/10/2012'; 
$myarr = explode('/',$startdate1);

$mynewdate = $myarr[1].'/'.$myarr[0].'/'.$myarr[2];

$newstartdate1 = date('Y-m-d',strtotime($mynewdate));

echo $newstartdate1;
于 2012-10-15T10:15:05.197 に答える