1

2 つの日時文字列が送信されています。

$StartDateTime = '2012-12-25T23:00:43.29';
$EndDateTime = '2012-12-26T06:50:43.29';

timediff を実行して経過時間を取得し、日付コンポーネントをある列に、時間コンポーネントを別の列に割り当てる必要があります。私がやっていることはこれです:

$d1 = new DateTime();
$d2 = new DateTime();

list($year,$month,$day) = explode('-',mb_strstr($StartDateTime,'T', TRUE));
list($hour,$minute,$second) = explode(':',trim(mb_strstr($StartDateTime,'T', FALSE),'T'));
$d1->setDate($year,$month,$day);
$d1->setTime($hour,$minute,$second);
list($year,$month,$day) = explode('-',mb_strstr($EndDateTime,'T', TRUE));
list($hour,$minute,$second) = explode(':',trim(mb_strstr($EndDateTime,'T', FALSE),'T'));
$d2->setDate($year,$month,$day);
$d2->setTime($hour,$minute,$second);

$diff = $d1->diff($d2);

これで、任意の形式で $diff を取得できます。

$thisformat = $diff->format('%H:%I:%S');
$thatformat = $diff->format('%H%I%S');

そして、個別の DATE および TIME コンポーネントをそれぞれのオブジェクト プロパティ (両方とも文字列) に取得できます。

$somedateproperty = $d1->format('Y-m-d');
$sometimeproperty = $d1->format('H:i:s');
$anotherdateproperty = $d2->format('Y-m-d');
$anothertimeproperty = $d2->format('H:i:s');

毎回解析するよりも、これらの文字列を簡単に変換できるものがあるはずだと考え続けてください。そして、それが私の質問です。どうすればこれをもっと簡単に行うことができますか?

4

2 に答える 2