12

既存の日付に時間を追加したい。2 つの文字列変数があります。

$date     = "2013-01-05 10:55:15";
$interval =            "50:25:10";

最終日「2013-01-07 13:20:25」を計算したい。時間は 23 時間より長くなる場合があります。つまり、この間隔は 1 日より長くなる可能性があります。

これを行う最良の方法は何ですか?

4

5 に答える 5

14

DateTime APIを使用します。

$date = new DateTime("2013-01-05 10:55:15");
$date->add(new DateInterval("PT50H25M10S"));

date()次に、関数で使用するのと同じ日付形式の文字列に変換して戻すことができます。

$string = $date->format("Y-m-d H:i:s");

定義の詳細についてはDateInterval、次のページを参照してください。

日付間隔

形式は、「ピリオド」を表す文字 P で始まります。各期間は、整数値とそれに続く期間指定子で表されます。期間に時間要素が含まれる場合、仕様のその部分の前に文字 T が付きます。

簡単な例をいくつか示します。2日間はP2Dです。2 秒は PT2S です。6 年 5 分は P6YT5M です。

この場合PT50H25M10Sは 50 時間 25 分 10 秒を意味します

DateInterval は PHP 5.3 以降でのみ利用可能であることに注意してください。より低いバージョンを使用する必要がある場合は、次のようなものを使用できます。

 $time = strtotime("2013-01-05 10:55:15");
 $time += 55*60*60 + 25*60 + 10;
 $newDate = date("Y-m-d H:i:s");
于 2013-09-26T19:10:54.377 に答える
6

これは少しトリッキーです。

通常、それが静的な期間であった場合、または単一の期間タイプであった場合にここで行うことは、次の行に沿ったものです。

$date = "2013-01-05 10:55:15";
$time = new DateTime($date);
$time->add(new DateInterval('PT5M'));

これにより、datetime に 5 分が追加されます。ただし、間隔全体を渡すことができるとは思えません。したがって、おそらくしなければならないことは、間隔を : で分割し、間隔の各部分 (動的だと思いますか?) を別々に日付に追加することです。最初は数時間、次に分、そして秒

詳細については、こちらを参照してください: http://www.php.net/manual/en/datetime.add.php

于 2013-09-26T19:10:04.730 に答える
5

最初に間隔を爆発させてから、時間、分、秒を取得してから、DateTime を使用add()して間隔を追加できます。次のようにします。

$interval = '50:25:10';
$datestring = '2013-01-05 10:55:15';    
list($hours, $minutes, $seconds) = explode(':', $interval); 

$date = new DateTime($datestring);    
$date->add(new DateInterval('PT'.$hours.'H'.$minutes.'M'.$seconds.'S'));
echo $date->format('Y-m-d H:i:s');

デモ!

于 2013-09-26T19:20:16.360 に答える
5

DateIntervalDateTime->add()を使用します。

$date = new DateTime("2013-01-05 10:55:15");
$date->add(new DateInterval("PT50H25M10S"));
于 2013-09-26T19:08:44.970 に答える
1

上記の回答に基づいて誰かが必要な場合に備えて、関数を次のように作成しました。

public function addTime($date, $time) {
    $atime = explode(":", $time);
    $_date = date_create_from_format("Y-m-d H:i:s", $date);
    $_date->add(new DateInterval("PT" . intval($atime[0])."H".intval($atime[1])."M".intval($atime[2])."S"));
    return $_date->format("Y-m-d H:i:s");
}

それが誰かを助けることを願っています

于 2013-09-26T23:46:18.350 に答える