una sumar suma restar remove obtener meses horas formato fechas fecha actual php date

php - sumar - incrementar la fecha por un mes



sumar meses a una fecha php (13)

Digamos que tengo una fecha en el siguiente formato: 2010-12-11 (year-mon-day)

Con PHP, quiero incrementar la fecha en un mes, y quiero que el año se incremente automáticamente, si es necesario (es decir, incrementándose de diciembre de 2012 a enero de 2013).

Saludos.


Gracias, Jason, tu publicación fue muy útil. Lo reformaté y agregué más comentarios para ayudarme a entenderlo todo. En caso de que eso ayude a alguien, lo he publicado aquí:

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


Necesitaba una funcionalidad similar, excepto por un ciclo mensual (más meses, menos 1 día). Después de buscar SO por un tiempo, pude crear esta solución plug-n-play:

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

Ejemplo:

$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


Para cualquiera que busque una respuesta a cualquier formato de fecha.

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

Solo cambia el formato de fecha.


Primero configura el formato de fecha como 12-12-2012

Después de usar esta función, funciona correctamente;

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

Aquí 12-12-2012 es su fecha y +2 meses es el incremento del mes;

También aumenta de año, fecha

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

Ans es 12-12-2013



Use DateTime::add .

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

Utilicé clone porque add modifica el objeto original, lo que podría no ser deseable.


Yo uso de esta manera:

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


poner una fecha en el cuadro de entrada y luego hacer clic en el botón obtener día a partir de la fecha en jquery

$(document).ready( function() { $("button").click(function(){ var day = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; var a = new Date(); $(".result").text(day[a.getDay()]); }); });


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

Si desea incrementar por días, también puede hacerlo

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


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


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

Esto compensará los meses de febrero y los otros 31 días. Por supuesto, puede hacer muchas más comprobaciones para obtener los formatos de fechas relativas a "este día el próximo mes" (lo que no funciona tristemente, ver más abajo), y también podría usar DateTime.

Tanto DateInterval(''P1M'') como strtotime("+1 month") básicamente agregan ciegamente 31 días, independientemente de la cantidad de días del mes siguiente.

  • 2010-01-31 => 3 de marzo
  • 2012-01-31 => 2 de marzo (año bisiesto)

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

Ejemplos de uso:

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


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

esto devuelve una marca de tiempo que se puede usar con la función de fecha