10

私は次のような日付文字列を持っています:

"2012 28 Nov 21:00 CET"

strtotime("2012 28 Nov 21:00 CET")falseを返します。

この文字列を日付オブジェクトに変換する方法はありますか、それとも別の形式にする必要がありますか?

4

2 に答える 2

21

2012 28 Nov 21:00 CET奇妙な日付/時刻形式です。YDM?どこで手に入れますか?

いずれにせよ、DateTimeオブジェクトには、次のcreateFromFormatことをより適切に解析するメソッドがあります。

$dt = DateTime::createFromFormat("Y d M H:i T", '2012 28 Nov 21:00 CET');
$ts = $dt->getTimestamp();
echo $ts; // 1354132800 

ここで試してみてください:http://codepad.viper-7.com/NfAmcw

strtotimeYDMではない「英語のテキスト日時」(マニュアルによる)を期待しています。falseを返すときはいつでもstrtotime、このアプリケーションで予期されている文字列を理解しません。マニュアルページの注記は、この問題を扱っています。

ノート:

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

あいまいさの可能性を回避するために、可能な場合はISO 8601(YYYY-MM-DD)の日付またはDateTime :: createFromFormat()を使用することをお勧めします。

それも同様に、DateTime日付や時刻とのやり取りに優れたツールです。

ドキュメンテーション

于 2012-11-28T21:22:51.917 に答える
2

strtotimeは日付オブジェクトを作成せず、単に入力を解析しようとし、UNIXタイムスタンプを返します。

ここで有効な形式を見つけることができます:http ://www.php.net/manual/en/datetime.formats.php

echo strtotime("2012-11-28T21:00:00+01:00");

出力します1354132800

php DateTimeオブジェクトを作成するには、次のようにします。

$date = new DateTime('2012-11-28T21:00:00+01:00');
echo $date->format('Y-m-d H:i:s');
于 2012-11-28T21:20:47.333 に答える