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.