2012-02-10 6 views
3
$t = DateTime::createFromFormat('Gi', '900'); 
$time_str = $t->format('gi a'); 
echo $time_str; //outputs 600 pm instead of 9am. Why? and How do I get 9am? 

を働いていません!PHPの日付フォーマットは、私が間違っている..私は日付フォーマットの観点から、ここで与えられているものを、次の午前つもりですどこがわからない

+2

をすることによって...しかし、時間は分離する必要が疑いなし理由はわかりましたが、これは動作します> 'DateTime :: createFromFormat( 'G i'、 '9 00');'私は時間が何らかの方法で分離されている必要があると思います – ManseUK

答えて

2

リンクしたドキュメントはdate()の機能です。 DateTime::createFromFormatは同じではありません(ただし、フォーマット文字列はほとんど同じです)。

フォーマット解析で、時と分のコンポーネントの違いを認識できない場合があります。あなたがスペースでそれらを分割した場合

は、あなたが希望する結果を得る:

$t = DateTime::createFromFormat('G i', '9 00'); 
$time_str = $t->format('gi a'); 
echo $time_str; 
// Output is 900 am 

編集:Giのようなフォーマット文字列がknown bugで解析するPHP用

ことができません。 Gのパーサは、9または90のどちらを読み込むかを知らず、後者の場合は90が高すぎます。私は私のコメントで述べたよう

+0

ああありがとう!それは助ける!これは、時間を素早く計算するためです(配列インデックスとして使用する必要があるため)、それらを数値[0〜2359]として保存しています。だから、印刷のためにam/pmに変換する最善の方法は、時間と分に分割して、12などを減算することでしょうか? – crazyphoton

+0

時間文字列に先行ゼロを埋め込むと、それを正しく解析するようです。 '0900' = 900 amしかし、am/pmを使用した場合、標準フォーマットであるので、出力時間の時間と分の間にコロンを入れることを強く検討します。 – JYelton

+0

はい、そうです。しかし、01000は失敗します。手動で行うほうが簡単でした:) – crazyphoton

2

これは動作します:

$t = DateTime::createFromFormat('G i', '9 00'); 
$time_str = $t->format('gi a'); 
echo $time_str.PHP_EOL; 

書き留めどこいずれかを見つけることができません - のいずれかのスペースまたはコロンまたは何か他の

+0

それは完璧な意味合いがあります。いい答えだ! ;) –

+0

ありがとう!私はバグへのリンクのために他の答えを受け入れました:) – crazyphoton

関連する問題