inicio fin etiquetas ejemplos php

fin - En PHP, ¿hay una manera fácil de obtener la primera y la última fecha de un mes?



inicio y fin en php (10)

El primer día del mes siempre es 1. Entonces se convertirá

YYYY-MM-01

el último día se puede calcular como:

<?php $num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31 echo "There was $num days in August 2003"; ?>

Necesito obtener el primer y el último día de un mes en el formato AAAA-MM-DD dado solo el mes y el año. ¿Hay una manera buena y fácil de hacer esto?


El primer día siempre es AAAA-MM-01, ¿no es así? Ejemplo: date("YMd", mktime(0, 0, 0, 8, 1, 2008))

El último día es el día anterior al primer día del mes siguiente:

$date = new DateTime("2008-09-01"); $date->modify("-1 day"); echo $date->format("Y-m-d");


OK, primero es muy fácil.

date (''Y-m-d'', mktime(0,0,0,MM,01,YYYY));

El último es un poco más complicado, pero no mucho.

date (''Y-m-d'', mktime(0,0,0,MM + 1,-1,YYYY));

Si recuerdo mi fecha de PHP cosas correctamente ...

** editar - ¡Gah! Batido a eso alrededor de un millón de veces ...

Editar por Pat:

El último día debería haber sido

date (''Y-m-d'', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1


Por cierto, la solución @ZombieSheep

date (''Y-m-d'', mktime(0,0,0,$MM + 1,-1,$YYYY));

no funciona debe ser

date (''Y-m-d'', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1

Por supuesto, la solución aceptada por Michał Słaby es la más simple.


$first = date(''Y-m-d'', mktime(0, 0, 0, $month, 1, $year)); $last = date(''Y-m-t'', mktime(0, 0, 0, $month, 1, $year));

Ver fecha () en la documentación de PHP.


Solo para verificar que no me perdí ningún cabos sueltos:

$startDay = 1; if (date("m") == 1) { $startMonth = 12; $startYear = date("Y") - 1; $endMonth = 12; $endYear = date("Y") - 1; } else { $startMonth = date("m") - 1; $startYear = date("Y"); $endMonth = date("m") - 1; $endYear = date("Y"); } $endDay = date("d") - 1; $startDate = date(''Y-m-d'', mktime(0, 0, 0, $startMonth , $startDay, $startYear)); $endDate = date(''Y-m-d'', mktime(0, 0, 0, $endMonth, $endDay, $endYear));


<?php echo "Month Start - " . $monthStart = date("Y-m-1") . "<br/>"; $num = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); echo "Monthe End - " . $monthEnd = date("Y-m-".$num); ?>


La forma más fácil de hacer esto con PHP es

$dateBegin = strtotime("first day of last month"); $dateEnd = strtotime("last day of last month"); echo date("MYDATEFORMAT", $dateBegin); echo "<br>"; echo date("MYDATEFORMAT", $dateEnd);

O la última semana

if (date(''N'', time()) == 7) { $dateBegin = strtotime("-2 weeks Monday"); $dateEnd = strtotime("last Sunday"); } else { $dateBegin = strtotime("Monday last week"); $dateEnd = strtotime("Sunday last week"); }

O el último año

$dateBegin = strtotime("1/1 last year"); $dateEnd = strtotime("12/31 this year");


intente esto para obtener la cantidad de días en el mes:

$numdays = date(''t'', mktime(0, 0, 0, $m, 1, $Y));


Ejemplo; Quiero obtener el primer día y el último día del mes actual.

$month = (int) date(''F''); $year = (int) date(''Y''); date(''Y-m-d'', mktime(0, 0, 0, $month + 1, 1, $year)); //first date(''Y-m-d'', mktime(0, 0, 0, $month + 2, 0, $year)); //last

Cuando ejecuta esto, por ejemplo, en la fecha 2015-01-09, los valores primero y último serán secuencialmente;

2015-01-01 2015-01-31

Probado.