data di incremento di un mese

Diciamo che ho una data nel seguente formato: 2010-12-11 (year-mon-day)

Con PHP, voglio incrementare la data di un mese e voglio che l'anno venga automaticamente incrementato, se necessario (ovvero incrementando da dicembre 2012 a gennaio 2013).

Saluti.

$time = strtotime("2010.12.11"); $final = date("Ymd", strtotime("+1 month", $time)); // Finally you will have the date you're looking for. 

Avevo bisogno di una funzionalità simile, tranne che avevo bisogno di un ciclo mensile (più mesi, less 1 giorno), dopo aver cercato su SO per un po ', sono riuscito a creare questa soluzione plug-n-play.

 function add_months($months, DateTime $dateObject) { $next = new DateTime($dateObject->format('Ym-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 Ymd form $dateReturned = $newDate->format('Ym-d'); return $dateReturned; } 

esempio:

$ startDate = '2014-06-03'; // seleziona la data in formato Ymd

$ nMesi = 1; // scegli quanti mesi vuoi andare avanti

$ final = endCycle ($ startDate, $ nMonths) // output: 2014-07-02

Usa DateTime::add .

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

Ho usato il clone perché aggiungi modifica l'object originale, che potrebbe non essere desiderato.

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

questo restituisce un timestamp che può essere utilizzato con la function di data

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

Ciò compenserà febbraio e gli altri 31 giorni al mese. Ovviamente potresti fare molti più controlli per get più esatti i formati di date relative "questo giorno il prossimo mese" (che non funziona tristemente, vedi sotto), e potresti anche usare DateTime.

Sia DateInterval('P1M') che strtotime("+1 month") aggiungono essenzialmente ciecamente 31 giorni indipendentemente dal numero di giorni del mese successivo.

  • 2010-01-31 => 3 marzo
  • 2012-01-31 => 2 marzo (anno bisestile)

Io uso in questo modo: –

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

Per prima cosa, imposta il formato della data come 12-12-2012

Dopo l'uso questa function funziona correttamente;

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

Qui 12-12-2012 è la tua data e +2 mesi è l'incremento del mese;

Si incrementa anche di anno, data

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

Ans è 12-12-2013

Grazie Jason, il tuo post è stato molto utile. L'ho riformattato e aggiunto altri commenti per aiutarmi a capire tutto. Nel caso in cui questo aiuti qualcuno, l'ho postato qui:

 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 Ymd $cycle_end_date = $cycle_end_date_object->format('Ym-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('Ym-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 (eg 31) is greater than last day of next month (eg 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 Ymd 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 
 function dayOfWeek($date){ return DateTime::createFromFormat('Ym-d', $date)->format('N'); } 

Esempi di utilizzo:

 echo dayOfWeek(2016-12-22); // "4" echo dayOfWeek(date('Ym-d')); // "4" 
 $date = strtotime("2017-12-11"); $newDate = date("Ymd", strtotime("+1 month", $date)); 

Se vuoi aumentare di giorni puoi anche farlo

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

Per chiunque cerchi una risposta a qualsiasi formato di data.

 echo date_create_from_format('d/m/Y', '15/04/2017')->add(new DateInterval('P1M'))->format('d/m/Y'); 

Basta cambiare il formato della data.

Usa DateTime :: modifica come questo:

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

Vedi documentazioni:

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

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