Pertanyaan tanggal penambahan sebesar satu bulan


Katakanlah saya memiliki tanggal dalam format berikut: 2010-12-11 (tahun-hari-mon)

Dengan PHP, saya ingin menaikkan tanggal satu bulan, dan saya ingin tahun itu secara otomatis bertambah, jika perlu (yaitu peningkatan dari Desember 2012 hingga Januari 2013).

Salam.


75
2018-05-20 00:15


asal


Jawaban:


$time = strtotime("2010.12.11");
$final = date("Y-m-d", strtotime("+1 month", $time));

// Finally you will have the date you're looking for.

118
2018-05-20 00:45



Saya membutuhkan fungsi serupa, kecuali untuk siklus bulanan (plus bulan, minus 1 hari). Setelah mencari S.O. untuk sementara waktu, saya bisa membuat solusi plug-n-play ini:

function add_months($months, DateTime $dateObject) 
    {
        $next = new DateTime($dateObject->format('Y-m-d'));
        $next->modify('last day of +'.$months.' month');

        if($dateObject->format('d') > $next->format('d')) {
            return $dateObject->diff($next);
        } else {
            return new DateInterval('P'.$months.'M');
        }
    }

function endCycle($d1, $months)
    {
        $date = new DateTime($d1);

        // call second function to add the months
        $newDate = $date->add(add_months($months, $date));

        // goes back 1 day from date, remove if you want same day of month
        $newDate->sub(new DateInterval('P1D')); 

        //formats final date to Y-m-d form
        $dateReturned = $newDate->format('Y-m-d'); 

        return $dateReturned;
    }

Contoh:

$startDate = '2014-06-03'; // select date in Y-m-d format
$nMonths = 1; // choose how many months you want to move ahead
$final = endCycle($startDate, $nMonths); // output: 2014-07-02

28
2018-06-03 11:55



Menggunakan DateTime::add.

$start = new DateTime("2010-12-11", new DateTimeZone("UTC"));
$month_later = clone $start;
$month_later->add(new DateInterval("P1M"));

Saya menggunakan klon karena menambahkan memodifikasi objek asli, yang mungkin tidak diinginkan.


23
2018-05-20 00:17



strtotime( "+1 month", strtotime( $time ) );

ini mengembalikan stempel waktu yang dapat digunakan dengan fungsi tanggal


11
2018-05-20 00:18



Saya menggunakan cara ini: -

 $occDate='2014-01-28';
 $forOdNextMonth= date('m', strtotime("+1 month", strtotime($occDate)));
//Output:- $forOdNextMonth=02


/*****************more example****************/
$occDate='2014-12-28';

$forOdNextMonth= date('m', strtotime("+1 month", strtotime($occDate)));
//Output:- $forOdNextMonth=01

//***********************wrong way**********************************//
$forOdNextMonth= date('m', strtotime("+1 month", $occDate));
  //Output:- $forOdNextMonth=02; //instead of $forOdNextMonth=01;
//******************************************************************//

5
2018-01-19 05:42



(date('d') > 28) ? date("mdY", strtotime("last day of next month")) : date("mdY", strtotime("+1 month"));

Ini akan mengkompensasi bulan Februari dan 31 hari lainnya. Anda tentu saja dapat melakukan lebih banyak pemeriksaan untuk mendapatkan lebih tepat untuk 'hari ini bulan depan' format tanggal relatif (yang tidak bekerja dengan sedih, lihat di bawah), dan Anda juga bisa menggunakan DateTime.

Kedua DateInterval('P1M') dan strtotime("+1 month") pada dasarnya secara membuta menambahkan 31 hari terlepas dari jumlah hari di bulan berikutnya.

  • 2010-01-31 => 3 Maret
  • 2012-01-31 => 2 Maret (tahun kabisat)

4
2017-11-10 22:07



Harap pertama Anda mengatur format tanggal Anda seperti 12-12-2012

Setelah menggunakan fungsi ini berfungsi dengan baik;

$date =  date('d-m-Y',strtotime("12-12-2012 +2 Months");

Di sini 12-12-2012 adalah tanggal Anda dan +2 Bulan merupakan kenaikan bulan;

Anda juga kenaikan Tahun, Tanggal

strtotime("12-12-2012 +1 Year");

Ans adalah 12-12-2013


3
2017-11-15 09:32