0

次の文字列を解析しようとしています:

 Thu Oct 03 2013 07:03:41 GMT+0200 (Central Europe Standard Time)

しかし、対応するフォーマットを見つけるのに苦労しています。試してみました:

  $date= DateTime::createFromFormat('D M d Y H:i:s eO (*)','Thu Oct 03 2013 07:03:41 GMT+0200 (Central Europe Standard Time)');
  echo $date->format('Y-m-d');

これはエラーになります。問題は、GMT+0200 と括弧の間にスペースがないことです。以下は問題なく動作します

$date= DateTime::createFromFormat('D M d Y H:i:s e O','Thu Oct 03 2013 07:03:41 GMT +0200');
echo $date->format('Y-m-d');

しかし(明らかに)最初の例も解析できるはずです。では、正しいフォーマットがどのように見えるべきかについて何か提案はありますか?

私が得るエラー:

Fatal error: Call to a member function format() on a non-object in C:\....

$date->format を呼び出す前の $date の var_dump:

 boolean false
4

2 に答える 2

1

着信文字列を分割できます。この特定の猫の皮を剥ぐ方法の 1 つを次に示します。

$dateString = 'Thu Oct 03 2013 07:03:41 GMT+0200(Central Europe Standard Time)';
\DateTime::createFromFormat('D M d Y H:i:s O', explode('(', $dateString)[0]);

詳細については、 http://php.net/dateを参照してください。

それが働いて参照してください

于 2013-10-04T15:25:41.417 に答える
1

問題はフォーマット文字列です。

D M d Y H:i:s e+

入力に「GMT」とオフセットの間に区切り文字がない が含まeOているという理由だけで、に置き換えました。これは、可変量の入力を消費できる唯一の指定子です ( は1つのトークン、つまり 1 つの単語に一致します。後でさらに入力がある場合、解析は失敗します)。eGMT+0200(*)+*

+(use to see it) を使用しているため、警告は引き続き表示されますDateTime::getLastErrorsが、変換は正しく行われることに注意してください。

于 2013-10-04T15:31:57.510 に答える