Menambahkan menit ke waktu saat ini di PHP

99

Saya benar-benar terjebak dengan menambahkan X menit ke waktu, setelah melakukan banyak google'ing dan membaca manual PHP, saya sepertinya tidak berhasil.

Format waktu tanggal yang saya miliki adalah:

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

Menit yang akan ditambahkan hanyalah angka antara 0 dan 59

Saya ingin hasilnya sama dengan format masukan dengan menit ditambahkan.

Bisakah seseorang memberi saya contoh kode yang berfungsi, karena upaya saya sepertinya tidak membawa saya ke mana pun?

Luke B
sumber

Jawaban:

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

The standar ISO 8601 untuk durasi adalah string dalam bentuk P{y}Y{m1}M{d}DT{h}H{m2}M{s}Sdi mana {*}bagian yang diganti dengan nilai angka yang menunjukkan berapa lama durasi adalah.

Misalnya P1Y2DT5Sartinya 1 tahun, 2 hari, dan 5 detik.

Dalam contoh di atas, kami menyediakan PT5M(atau 5 menit) untuk DateIntervalkonstruktor.

Tim Cooper
sumber
Dengan tanggal: 2011-11-18 00:00 jika saya menambahkan 5 menit, saya mendapatkan 2012-04-18 00:00 sebagai hasilnya. `$ waktu = DateTime baru ($ _ PERMINTAAN ['mulai']); $ waktu-> tambahkan (DateInterval baru ('P'. $ durasi. 'M')); $ endTime = $ waktu-> format ('Ymd H: i'); echo $ endTime; `Berlaku untuk pemformatan, tampaknya saya juga tidak bisa menyelesaikannya hari ini ^ _ ^
Luke B
2
Bagaimana DateTime lebih baik daripada strtotime?
bozdoz
11
Apa yang diwakili oleh 'PT'?
NicholasJohn16
1
@ Bozdoz Ini bukan pertanyaan tentang metode mana yang "lebih baik". strtotimemenghasilkan stempel waktu Unix sebagai integeryang berguna jika Anda misalnya menyortir tanggal di php. The DateTimekelas menyediakan pilihan untuk operasi objek dan gaya prosedural. Ini lebih mudah dibaca dan juga memiliki dukungan yang lebih baik untuk menangani perbedaan antara zona waktu yang berbeda; misalnya, jika Anda memiliki proyek yang mengeluarkan tanggal untuk berbagai zona waktu berbeda yang bersumber dari contoh data yang sama.
DrewT
2
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> Format dimulai dengan huruf P, untuk "titik". Setiap periode durasi diwakili oleh nilai integer diikuti oleh penunjuk periode. Jika durasi mengandung elemen waktu, bagian dari spesifikasi tersebut didahului oleh huruf T.
vee
114

Kelas DateTime PHP memiliki metode modifikasi yang berguna yang menggunakan teks yang mudah dipahami.

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

Anda juga bisa menggunakan interpolasi atau penggabungan string untuk mengatur parameternya:

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");
Daniel
sumber
10
Terpendek dan terbaik!
1
Kedua jawaban teratas bagus dan berfungsi dengan baik, tetapi saya lebih suka yang ini. Sepertinya lebih sederhana dan lebih intuitif.
HartleySan
38
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

hasilnya adalah

2011-11-17 05:21:00

Demo langsung here

Jika Anda belum terbiasa strtotime, sebaiknya Anda php.netmencari tahu tentang kekuatan hebatnya :-)

Nemoden
sumber
1
Yang paling pengertian
Naveen DA
19

Anda dapat melakukan ini dengan fungsi asli dengan mudah:

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

Saya akan merekomendasikan metode kelas DateTime, baru saja diposting oleh Tim.

Brad
sumber
7

Saya pikir ini akan membantu beberapa orang ketika berurusan dengan zona waktu juga. Solusi saya yang dimodifikasi didasarkan pada solusi @Tim Cooper, jawaban yang benar di atas.

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

Garis tebal, baris 3, adalah penjumlahan. Saya harap ini membantu beberapa orang juga.

acarito
sumber
4

Sedikit jawaban yang terlambat, tetapi metode yang akan saya gunakan adalah:

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

Atau di 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')
Peter
sumber
4

Saya tidak tahu mengapa pendekatan yang ditetapkan sebagai solusi tidak berhasil untuk saya. Jadi saya memposting di sini apa yang berhasil untuk saya dengan harapan dapat membantu siapa saja:

$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;
pengguna3361395
sumber
3

Jika Anda ingin memberikan variabel yang berisi menit.

Maka saya pikir ini adalah cara yang bagus untuk mencapai ini.

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

Menggunakan strtotime("+5 minute", $date);


Contoh:

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

Sebagaimana dicatat oleh Brad dan Nemoden dalam jawaban mereka di atas, strtotime () adalah fungsi yang hebat. Secara pribadi, saya menemukan Objek DateTime standar menjadi terlalu rumit untuk banyak kasus penggunaan. Saya hanya ingin menambahkan 5 menit ke waktu saat ini, misalnya.

Saya menulis fungsi yang mengembalikan tanggal sebagai string dengan beberapa parameter opsional:
1.) waktu: String | mis .: "+5 menit" (default = waktu saat ini)
2.) format: String | mis .: "Ymd H: i: s" (default = "Ymd H: i: s O")

Jelas, ini bukan metode berfitur lengkap. Hanya fungsi cepat dan sederhana untuk mengubah / memformat tanggal sekarang.

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"); 
Robert Schwindaman
sumber
0

Satu lagi contoh fungsi untuk melakukan ini: (mengubah format waktu dan interval sesuka Anda menurut ini untuk function.date , dan ini untuk DateInterval ):

(Saya juga telah menulis bentuk alternatif dari fungsi di bawah ini .)

// 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;
FirstFraktal
sumber
0

satu baris format waktu mysql

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

Tanpa menggunakan variabel:

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

Dengan menggunakan variabel:

 $interval= 15;
 $yourDate->modify("+{$interval } minutes");  
 echo $yourDate->format( "Y-m-d H:i");
Wajid khan
sumber
Apa $yourDate? Apa jawaban ini menambahkan jawaban serupa yang diposting tahun-tahun sebelumnya?
Tidak ada
Dear @ J.Money $ yourDate berarti $ nama variabel dan Mungkin jawaban saya akan bermanfaat bagi seseorang setelah 100 tahun. Tidak masalah kapan kita harus menjawab sampai pertanyaan tidak ditutup. Saya harap Anda memahami dan menghapus tanda negatif.
Wajid khan