PHP'de tarih saatine dakika ekleme


99

Bir tarih saatine X dakika eklemekte gerçekten takıldım, çok fazla google'ing ve PHP manuel okuma yaptıktan sonra, hiçbir yere varmıyorum.

Sahip olduğum tarih ve saat biçimi:

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

Eklenecek dakikalar yalnızca 0 ile 59 arasında bir sayı olacaktır

Çıktının, eklenen dakikalarla girdi biçimiyle aynı olmasını istiyorum.

Girişimlerim beni hiçbir yere götürmüyor gibi göründüğü için birisi bana çalışan bir kod örneği verebilir mi?

Yanıtlar:


178
$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');

Süresince ISO 8601 standardı şeklinde bir dizedir P{y}Y{m1}M{d}DT{h}H{m2}M{s}Snerede {*}parçalar süresi ne kadar süre belirten bir sayı değeri ile değiştirilir.

Örneğin, P1Y2DT5S1 yıl, 2 gün ve 5 saniye anlamına gelir.

Yukarıdaki örnekte, kurucuya PT5M(veya 5 dakika) veriyoruz DateInterval.


Tarihle: 2011-11-18 00:00 5 dakika eklersem, sonuç olarak 2012-04-18 00:00 alıyorum. `$ zaman = yeni Tarih Saat ($ _ TALEP ['başlangıç']); $ zaman-> ekle (yeni DateInterval ('P'. $ süre. 'M')); $ endTime = $ zaman-> format ('Ymd H: i'); echo $ endTime; `Biçimlendirme için bazı uygulamalar, öyle görünüyor ki bugün bunu da çözemiyorum ^ _ ^
Luke B

2
DateTime nasıl strtotime'dan daha iyi?
bozdoz

11
'PT' neyi temsil eder?
NicholasJohn16

1
@bozdoz Hangi yöntemin daha iyi olduğu sorusu değil. Örneğin php'de tarihleri ​​sıralıyorsanız yararlı olan strtotimebir Unix zaman damgası üretir integer. DateTimeSınıf nesnesi ve prosedürel tarzı operasyonlar için seçenekler sağlar. Daha okunaklı ve farklı saat dilimleri arasındaki farklılıkların işlenmesi için daha iyi desteğe sahip; örneğin, aynı veri örneğinden kaynaklanan çok sayıda farklı saat dilimi için tarihler çıkaran bir projeniz varsa.
DrewT

2
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> Biçim, "nokta" için P harfiyle başlar. Her bir süre periyodu bir tamsayı değeri ve ardından bir dönem göstergesi ile temsil edilir. Süresi saat elemanları içeriyorsa, tarifnamenin bu kısım T harfi öncesinde
vee

114

PHP'nin DateTime sınıfı , anlaşılması kolay metinler alan kullanışlı bir değiştirme yöntemine sahiptir.

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

Ayrıca, onu parametreleştirmek için dize enterpolasyonu veya birleştirme de kullanabilirsiniz:

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

10
En kısa ve en güzel!

1
En iyi yanıtların ikisi de harika ve iyi çalışıyor, ancak bunu tercih ederim. Sadece daha basit ve daha sezgisel görünüyor.
HartleySan

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

sonuç

2011-11-17 05:21:00

Canlı demo here

strtotimeHenüz aşina değilseniz, php.netonun büyük gücünü keşfetmeye başlasanız iyi olur :-)


1
En anlayışlı olan
Naveen DA

19

Bunu yerel işlevlerle kolayca yapabilirsiniz:

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

DateTime sınıf yöntemini tavsiye ederim, sadece Tim tarafından yayınlanmıştır.


7

Bunun zaman dilimleriyle uğraşırken de bazılarına yardımcı olacağını düşündüm. Değiştirilmiş çözümüm, yukarıdaki doğru yanıt olan @ Tim Cooper'ın çözümüne dayanmaktadır.

$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");

Kalın çizgi, satır 3, eklemedir. Umarım bu bazı insanlara da yardımcı olur.


4

Biraz geç cevap, ancak kullanacağım yöntem şudur:

// 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');

Veya PHP> = 5.4'te

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

Çözüm olarak belirlenen yaklaşımın benim için neden işe yaramadığını bilmiyorum. Bu yüzden, herkese yardımcı olabileceğini umarak benim için işe yarayan şeyi buraya gönderiyorum

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

3

Dakikaları içeren bir değişken vermek istiyorsanız.

O halde bunun bunu başarmanın harika bir yolu olduğunu düşünüyorum.

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

2

Kullanım strtotime("+5 minute", $date);


Misal:

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

1

Brad ve Nemoden tarafından yukarıdaki cevaplarında belirtildiği gibi, strtotime () harika bir işlevdir. Şahsen, standart DateTime Nesnesini birçok kullanım durumu için aşırı karmaşık buldum. Örneğin, şimdiki saate 5 dakika eklemek istedim.

Bazı isteğe bağlı parametrelerle tarihi bir dizge olarak döndüren bir işlev yazdım:
1.) saat: Dize | örn: "+5 dakika" (varsayılan = geçerli saat)
2.) format: Dize | ör: "Ymd H: i: s" (varsayılan = "Ymd H: i: s O")

Açıkçası, bu tam özellikli bir yöntem değil. Sadece geçerli tarihi değiştirmek / biçimlendirmek için hızlı ve basit bir işlev.

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

Bunu yapmak için bir fonksiyona bir örnek daha: (zaman ve aralık formatlarını istediğiniz gibi değiştirmek function.date için buna ve DateInterval için buna göre ):

(Ayrıca aşağıdaki işlevin alternatif bir biçimini de yazdım .)

// 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

bir satır mysql datetime biçimi

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

-1

Değişken kullanmadan:

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

Bir değişken kullanarak:

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

Nedir $yourDate? Bu cevap, yıllar önce gönderilen benzer cevaplara ne katıyor?
Yok

Sevgili @ J.Money $ yourDate, $ değişken adı anlamına gelir ve Belki cevabım 100 yıl sonra birisi için yardımcı olur. Soru kapanana kadar ne zaman cevaplamamız gerektiği önemli değil. Umarım olumsuz işareti anlayacak ve kaldıracaksınız.
Wajid khan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.