web-dev-qa-db-ja.com

PHPの日付時刻に分を追加します

たくさんのgoogle'ingとPHPの手動読み取りを行った後、日付時刻にX分を追加することに本当に固執しています。どこにも行かないようです。

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

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

追加する分は、0〜59の数字になります

出力を分を追加した入力形式と同じにしたいと思います。

私の試みが私をどこにも連れて行っていないように思えるので、誰かが私に実用的なコード例を与えることができますか?

74
Luke B
$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の形式の文字列で、{*}の部分は期間の長さを示す数値に置き換えられます。

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

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

136
Tim Cooper

PHPのDateTimeクラス には便利な modify があり、わかりやすいテキストを取り込みます。

$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");
94
Daniel
$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 にアクセスして、強力なパワーを見つけてください:-)

33
Nemoden

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

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

ただし、Timが投稿したDateTimeクラスメソッドをお勧めします。

17
Brad

これは、タイムゾーンを扱うときにも役立つと思いました。私が修正したソリューションは、@ 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行目は太字の行です。これが一部の人々にも役立つことを願っています。

6
acarito

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

// 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')
4
Peter

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

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

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

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

日付を文字列として返す関数と、オプションのパラメーターをいくつか作成しました。
1。)time:String |例:「+ 5分」(デフォルト=現在の時間)
2。)format:String |例: "Y-m-d H:i:s"(デフォルト= "Y-m-d 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"); 
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");
0
Wajid khan

1行のmysql日時形式

$mysql_date_time = (new DateTime())->modify('+15 minutes')->format("Y-m-d H:i:s");
0
Sjaak Wish

これを行う関数のもう1つの例:(時間と間隔の形式を変更しますが、 this for function.date 、および this for 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;
0
FirstFraktal

ソリューションとして設定されたアプローチが私にとってうまくいかなかった理由がわかりません。だから私はここで誰にでも役立つことを願って私のために働いたものを投稿しています:

$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;
0
user3361395