PHPで日付時刻に分を追加する


95

日付時刻にX分を追加することに本当に行き詰っています。Googleで多くのことやPHPのマニュアルを読んだ後、どこにも行かないようです。

私が持っている日時形式は次のとおりです:

2011-11-17 05:05year-month-day hour:minute

追加する分は、0から59の間の数値になります

出力を、分が追加された入力形式と同じにしたいと考えています。

私の試みが私をどこかに連れて行っていないように見えるので、誰かが実際のコード例を教えてくれませんか?

回答:


176
$minutes_to_add = 5;

$time = new DateTime('2011-11-17 05:05');
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));

$stamp = $time->format('Y-m-d H:i');

継続時間ISO 8601規格P{y}Y{m1}M{d}DT{h}H{m2}M{s}Sは、{*}パーツが、継続時間の長さを示す数値に置き換えられた形式の文字列です。

たとえば、P1Y2DT5S1年、2日、5秒を意味します。

上記の例ではPT5MDateIntervalコンストラクターに(または5分)を提供しています。


日付:2011-11-18 00:00 5分追加すると、結果として2012-04-18 00:00が返されます。`$ time = new DateTime($ _ REQUEST ['start']); $ time-> add(new DateInterval( 'P'。$ duration。 'M')); $ endTime = $ time-> format( 'Ymd H:i'); echo $ endTime; `書式設定の謝辞、今日もこれを解決できないようです^ _ ^
ルークB

2
DateTimeはstrtotimeよりも優れていますか?
bozdoz

11
「PT」は何を表していますか?
NicholasJohn16

1
@bozdozどの方法が「良い」かは問題ではありません。たとえば、phpで日付を並べ替える場合に役立つstrtotimeUnixタイムスタンプを生成しintegerます。このDateTimeクラスは、オブジェクトおよび手続き型の操作のオプションを提供します。読みやすくなり、タイムゾーンの違いを処理するためのサポートも向上しています。たとえば、同じデータインスタンスをソースとする多数の異なるタイムゾーンの日付を出力するプロジェクトがある場合などです。
DrewT 2016

1
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >>形式は、「期間」の文字Pで始まります。各期間は、整数値とそれに続く期間指定子で表されます。持続時間が時間要素を含む場合、仕様のその部分は、文字Tで先行する
VEE

110

PHPのDateTimeクラスには、わかりやすいテキストを取り込む便利な変更メソッドがあります。

$dateTime = new DateTime('2011-11-17 05:05');
$dateTime->modify('+5 minutes');

また、文字列の補間または連結を使用して、パラメーター化することもできます。

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");

10
最短で最高!

1
上位の回答はどちらも素晴らしく、問題なく機能しますが、私はこれを好みます。シンプルで直感的に見えるだけです。
HartleySan

38
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

結果は

2011-11-17 05:21:00

ライブデモは here

strtotimeまだ慣れていない場合は、php.netそれが大きな力であることを発見するのが良いでしょう:-)


1
最も理解しているもの
Naveen DA

19

ネイティブ関数でこれを簡単に行うことができます:

strtotime('+59 minutes', strtotime('2011-11-17 05:05'));

Timが投稿したばかりのDateTimeクラスのメソッドをお勧めします。


7

これはタイムゾーンを扱うときにも役立つと思いました。私の修正したソリューションは、@ Tim Cooperのソリューション、上記の正解に基づいています。

$minutes_to_add = 10;
$time = new DateTime();
**$time->setTimezone(new DateTimeZone('America/Toronto'));**
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));
$timestamp = $time->format("Y/m/d G:i:s");

太字の3行目が追加されています。これが一部の人々にも役立つことを願っています。


4

少し遅い回答ですが、私が使用する方法は次のとおりです。

// Create a new \DateTime instance
$date = DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00');

// Modify the date
$date->modify('+5 minutes');

// Output
echo $date->format('Y-m-d H:i:s');

またはPHP> = 5.4

echo (DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00'))->modify('+5 minutes')->format('Y-m-d H:i:s')

3

分を含む変数を指定する場合。

そして、これはこれを達成するための素晴らしい方法だと思います。

$minutes = 10;
$maxAge = new DateTime('2011-11-17 05:05');
$maxAge->modify("+{$minutes} minutes");

2

使用する strtotime("+5 minute", $date);


例:

$date = "2017-06-16 08:40:00";
$date = strtotime($date);
$date = strtotime("+5 minute", $date);
echo date('Y-m-d H:i:s', $date);

2

なぜ解決策として設定されたアプローチがうまくいかなかったのか、私にはわかりません。だから私はここで投稿していますが、それが誰かを助けることができることを願って私のために働いたもの:

$startTime = date("Y-m-d H:i:s");

//display the starting time
echo '> '.$startTime . "<br>";

//adding 2 minutes
$convertedTime = date('Y-m-d H:i:s', strtotime('+2 minutes', strtotime($startTime)));

//display the converted time
echo '> '.$convertedTime;

1

上記の回答でBradとNemodenが述べたように、strtotime()は素晴らしい関数です。個人的には、標準のDateTimeオブジェクトは、多くのユースケースで非常に複雑であることがわかりました。たとえば、現在の時刻に5分を追加したかっただけです。

オプションのパラメーターをいくつか使用して、日付をストリングとして返す関数を作成しました
。1.)time:String | 例:「+5分」(デフォルト=現在時刻)
2.)format:String | 例: "Ymd H:i:s"(デフォルト= "Ymd H:i:s O")

明らかに、これは完全な機能を備えた方法ではありません。現在の日付を変更/フォーマットするための迅速でシンプルな機能。

function get_date($time=null, $format='Y-m-d H:i:s O')
{
    if(empty($time))return date($format);
    return date($format, strtotime($time));
}

// Example #1: Return current date in default format
$date = get_date(); 

// Example #2: Add 5 minutes to the current date
$date = get_date("+5 minutes"); 

// Example #3: Subtract 30 days from the current date & format as 'Y-m-d H:i:s'
$date = get_date("-30 days", "Y-m-d H:i:s"); 

0

これを行う関数のもう1つの例:(これは、function.dateの場合はこれに従って、DateIntervalの場合これに従って、時間と間隔の形式を変更します):

以下の関数の代替形式も作成しました。)

// Return adjusted time.

function addMinutesToTime( $dateTime, $plusMinutes ) {

    $dateTime = DateTime::createFromFormat( 'Y-m-d H:i', $dateTime );
    $dateTime->add( new DateInterval( 'PT' . ( (integer) $plusMinutes ) . 'M' ) );
    $newTime = $dateTime->format( 'Y-m-d H:i' );

    return $newTime;
}

$adjustedTime = addMinutesToTime( '2011-11-17 05:05', 59 );

echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL;


-1

変数を使用しない場合:

 $yourDate->modify("15 minutes");
 echo $yourDate->format( "Y-m-d H:i");

変数を使用すると:

 $interval= 15;
 $yourDate->modify("+{$interval } minutes");  
 echo $yourDate->format( "Y-m-d H:i");

なに$yourDate?この回答は何年も前に投稿された同様の回答に何を追加しますか?
なし

親愛なる@ J.Money $ yourDateは$ variable nameを意味し、たぶん私の答えは100年後に誰かに役立つでしょう。質問が締め切られない限り、いつ答えるべきかは問題ではありません。ネガティブマーキングを理解して削除していただければ幸いです。
ワジドカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.