Frage Inkrementieren Sie das Datum um einen Monat


Angenommen, ich habe ein Datum im folgenden Format: 2010-12-11 (Jahr-Montag)

Mit PHP möchte ich das Datum um einen Monat erhöhen, und ich möchte, dass das Jahr bei Bedarf automatisch erhöht wird (d. H. Von Dezember 2012 auf Januar 2013 erhöht wird).

Grüße.


76
2018-05-20 00:15


Ursprung


Antworten:


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

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

119
2018-05-20 00:45



Ich benötigte ähnliche Funktionalität, außer für einen monatlichen Zyklus (plus Monate, minus 1 Tag). Nach dem Suchen von S.O. Für eine Weile konnte ich diese Plug-n-Play-Lösung herstellen:

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

Beispiel:

$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



Benutzen DateTime::add.

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

ich benutzte Klon weil add das ursprüngliche Objekt modifiziert, was nicht erwünscht sein könnte.


23
2018-05-20 00:17



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

Dies gibt einen Zeitstempel zurück, der mit der Datumsfunktion verwendet werden kann


11
2018-05-20 00:18



Ich benutze diesen Weg: -

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

Dies wird den Februar und die anderen 31-Tage-Monate kompensieren. Sie können natürlich viel mehr tun, um genauer zu werden für "diesen Tag nächsten Monat" relative Datumsformate (was leider nicht funktioniert, siehe unten), und Sie könnten DateTime genauso gut verwenden.

Beide DateInterval('P1M') und strtotime("+1 month") fügen im Wesentlichen blind 31 Tage hinzu, unabhängig von der Anzahl der Tage im Folgemonat.

  • 2010-01-31 => 3. März
  • 2012-01-31 => 2. März (Schaltjahr)

4
2017-11-10 22:07



Bitte stellen Sie zuerst Ihr Datumsformat auf 12-12-2012

Nach der Verwendung dieser Funktion funktioniert es ordnungsgemäß.

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

Hier ist 12-12-2012 Ihr Datum und +2 Monate ist das Inkrement des Monats;

Sie erhöhen auch Jahr, Datum

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

Ans ist 12-12-2013


3
2017-11-15 09:32



Sie können verwenden DateTime::modify so was :

$date = new DateTime('2010-12-11');
$date->modify('+1 month');

Siehe Dokumentationen:

http://php.net/manual/fr/datetime.modify.php

http://php.net/manual/fr/class.datetime.php


2
2017-11-01 11:49



Danke Jason, dein Beitrag war sehr hilfreich. Ich habe es neu formatiert und weitere Kommentare hinzugefügt, um mir zu helfen, alles zu verstehen. Falls das irgendjemandem hilft, habe ich es hier gepostet:

function cycle_end_date($cycle_start_date, $months) {
    $cycle_start_date_object = new DateTime($cycle_start_date);

    //Find the date interval that we will need to add to the start date
    $date_interval = find_date_interval($months, $cycle_start_date_object);

    //Add this date interval to the current date (the DateTime class handles remaining complexity like year-ends)
    $cycle_end_date_object = $cycle_start_date_object->add($date_interval);

    //Subtract (sub) 1 day from date
    $cycle_end_date_object->sub(new DateInterval('P1D')); 

    //Format final date to Y-m-d
    $cycle_end_date = $cycle_end_date_object->format('Y-m-d'); 

    return $cycle_end_date;
}

//Find the date interval we need to add to start date to get end date
function find_date_interval($n_months, DateTime $cycle_start_date_object) {
    //Create new datetime object identical to inputted one
    $date_of_last_day_next_month = new DateTime($cycle_start_date_object->format('Y-m-d'));

    //And modify it so it is the date of the last day of the next month
    $date_of_last_day_next_month->modify('last day of +'.$n_months.' month');

    //If the day of inputted date (e.g. 31) is greater than last day of next month (e.g. 28)
    if($cycle_start_date_object->format('d') > $date_of_last_day_next_month->format('d')) {
        //Return a DateInterval object equal to the number of days difference
        return $cycle_start_date_object->diff($date_of_last_day_next_month);
    //Otherwise the date is easy and we can just add a month to it
    } else {
        //Return a DateInterval object equal to a period (P) of 1 month (M)
        return new DateInterval('P'.$n_months.'M');
    }
}

$cycle_start_date = '2014-01-31'; // select date in Y-m-d format
$n_months = 1; // choose how many months you want to move ahead
$cycle_end_date = cycle_end_date($cycle_start_date, $n_months); // output: 2014-07-02

0
2017-11-13 20:14



function dayOfWeek($date){
    return DateTime::createFromFormat('Y-m-d', $date)->format('N');
}

Anwendungsbeispiele:

echo dayOfWeek(2016-12-22);
// "4"
echo dayOfWeek(date('Y-m-d'));
// "4"

0
2017-12-22 10:28



$date = strtotime("2017-12-11");
$newDate = date("Y-m-d", strtotime("+1 month", $date));

Wenn Sie um Tage erhöhen möchten, können Sie das auch tun

$date = strtotime("2017-12-11");
$newDate = date("Y-m-d", strtotime("+5 day", $date));

0
2018-05-06 08:13