una semana obtener idioma formato fechas fecha español edad diferencia dar con cambiar calcular php laravel date php-carbon

php - semana - Cómo obtener el primer y último día del mes anterior con Carbon-Laravel



obtener dia de la semana carbon (5)

Actualmente hay un error dentro de Carbon al usar el método

Carbon::now()->startOfMonth()->subMonth()->endOfMonth()->toDateTimeString();

El error resulta en devolver el último día como 30 para aquellos meses que tienen 31 días.

IE: si se encuentra en marzo y ejecuta la llamada anterior, regresará 2017-03-30 y no 2017-03-31 como podría esperar.

Como estaba haciendo una operación entre fechas, terminé usando ...

Carbon::now()->startOfMonth()->subSeconds(1)->toDateTimeString();

Esto terminó con la fecha correcta dateTimeString para los días que terminan el 31.

Necesito el primer y último día del mes anterior usando Carbon Library, lo que he intentado es el siguiente:

$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonth()->toDateString(); $lastDayofPreviousMonth = Carbon::now()->endOfMonth()->subMonth()->toDateString();

El resultado que $firstDayofPreviousMonth = ''2016-04-01'' es para $firstDayofPreviousMonth = ''2016-04-01'' (ya que el mes actual es el 5 de mayo) y para $lastDayofPreviousMonth = ''2016-05-01'' .

Estoy obteniendo el resultado correcto para $firstDayofPreviousMonth , pero me da el resultado de 30 días anteriores y me da el resultado incorrecto para $lastDayofPreviousMonth .

¿Puede alguien ayudarme con esto?


Con esto ... la fecha inicio init a las 00:00 y la fecha finaliza a las 23:59

$start = new Carbon(''first day of last month''); $start->startOfMonth(); $end = new Carbon(''last day of last month''); $end->endOfMonth();


Para responder específicamente a su pregunta de por qué está obteniendo el resultado incorrecto para $lastDayofPreviousMonth .

Vamos a desglosar esta declaración en su ejemplo:

Carbon::now()->endOfMonth()->subMonth()->toDateString(); // Carbon::now() > 2016-05-05 // ->endOfMonth() > 2016-05-31 // ->subMonth() > 2016-04-31 // Simply takes 1 away from 5.

Esto nos deja con una fecha inválida - no hay 31 de abril. El día adicional se agrega simplemente a la última fecha válida (2016-04-30 + 1) que se acumula en mayo (2016-05-01).

Como se mencionó anteriormente, para asegurarse de que esto nunca suceda, siempre restaure la fecha al primer día del mes antes de hacer cualquier otra cosa (ya que cada mes tiene un primer día).

$lastDayofPreviousMonth = Carbon::now()->startofMonth()->subMonth()->endOfMonth()->toDateString(); // Carbon::now() > 2016-05-05 // ->startofMonth() > 2016-05-01 00:00:00 // ->subMonth() > 2016-04-01 00:00:00 // ->endOfMonth() > 2016-04-30 23:59:59


Prueba esto:

$start = new Carbon(''first day of last month''); $end = new Carbon(''last day of last month'');


Solo prueba esto

$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonth()->toDateString(); $lastDayofPreviousMonth = Carbon::now()->subMonth()->endOfMonth()->toDateString();