Uh, estoy en un apuro, John Conde respondió a la pregunta contesté, pero me olvido de mencionar, que tiene que trabajar en 5.2, así que voy a utilizar realmente la respuesta del Sr.-sk ...
pihentagy
Respuestas:
260
Requiere PHP 5.3 para funcionar ("primer día de" se introduce en PHP 5.3). De lo contrario, el ejemplo anterior es la única forma de hacerlo:
<?php// First day of this month
$d =newDateTime('first day of this month');
echo $d->format('jS, F Y');// First day of a specific month
$d =newDateTime('2010-01-19');
$d->modify('first day of this month');
echo $d->format('jS, F Y');// alternatively...
echo date_create('2010-01-19')->modify('first day of this month')->format('jS, F Y');
En PHP 5.4+ puedes hacer esto:
<?php// First day of this month
echo (newDateTime('first day of this month'))->format('jS, F Y');
echo (newDateTime('2010-01-19'))->modify('first day of this month')->format('jS, F Y');
Si prefiere una forma concisa de hacerlo, y ya tiene el año y el mes en valores numéricos, puede usar date():
<?php
echo date('Y-m-01');// first day of this month
echo date("$year-$month-01");// first day of a month chosen by you
Tenga en cuenta que no tiene que pasar ->modify()si solo desea el primer día del mes actual . Puede pasar 'first day of this month'al constructor DateTime directamente como: $date = new DateTime('first day of this month'). Solo digo ...
Esta es la OMI, con mucho, la forma más simple y legible de resolver esto, si todo lo que necesita es una representación de cadena de la fecha.
Markus Amalthea Magnuson
55
El último día del mes podría ser agarrado usando date('Y-m-t');.
Mark Tomlin
77
FYI: La fecha 't' en ('Ym-t') siempre representa el número de días en ese mismo mes. Una forma excelente y sencilla de obtener el último día del mes actual.
Pascal Klein
1
Si uso esto para tratar de obtener el día de la semana, date('w', '2015-05-01');entonces termino con el día anterior en lugar del día real. (Esto me daría 4 en lugar de los 5 correctos).
PBwebD
55
Esto es simplemente brillante. Lo $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
amplié
32
Esto es todo lo que necesitas:
$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());
$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());
$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());
echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';
echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';
echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
Esta es una solución ordenada, sin embargo strtotime('first day of this month', time()), regresará el primer día y la hora es la misma que la actual. Por lo tanto, no es el primer día a las 0:00 en punto, es el primer día y ahora es el momento. Esto lo arregla strtotime('first day of this month 00:00:00', time()).
Kalle H. Väravas
22
Actualmente estoy usando esta solución:
$firstDay =new \DateTime('first day of this month');
$lastDay =new \DateTime('last day of this month');
El único problema que encontré es que se está estableciendo un tiempo extraño. Necesitaba el rango correcto para nuestra interfaz de búsqueda y terminé con esto:
$firstDay =new \DateTime('first day of this month 00:00:00');
$lastDay =new \DateTime('first day of next month 00:00:00');
Esto es genial, pero tengo algunos problemas en el primer día del mes. Entonces, si hoy es el 1 de septiembre, 11am. ¡Llegaré el 1 de agosto! Necesito verificar si es el "1er" hoy y si es así, usar "ahora". raro (Php 7.3.9)
Jacob Christensen
@JacobChristensen aún no lo ha experimentado. ¿Cómo lo arreglaste?
Nikola Petkanski
Muy cierto, PHP parece no ser muy bueno con esto Primero y último. $ n = new \ DateTime ('primer día de'. (new \ DateTime ()) -> formato ('F')); "primer día de enero". Lo mismo sucede para la semana cuando es lunes y es un poco ... frustrante :)
Jacob Christensen
20
Utilizo una forma loca de hacer esto usando este comando
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
fuera del tema, pero ¿cómo calcularía el último día del mes en el mismo escenario?
LoneWOLFs
@LoneWOLFs last day of {$month} {$year}o last day of this monthambos funcionan. Pero tenga en cuenta que $ month tendría que ser una cadena que contenga el nombre del mes como "enero", todo el tiempo pensado para "Decemember". O simplemente podrías usarlo date('Y-m-t');.
Mark Tomlin
3
Puedes hacerlo así:
$firstday = date_create()->modify('first day January 2010');
Utilizo esto con un trabajo cron diario para verificar si debo enviar un correo electrónico el primer día de cualquier mes a mis afiliados. Son unas pocas líneas más que las otras respuestas pero sólidas como una roca.
//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];//if it's not the first day then stopif($day !="01"){
echo "error - it's not the first of the month today";exit;}
utilizando el método de fecha, deberíamos poder obtener el resultado. es decir; fecha ('N / D / l', mktime (0, 0, 0, mes, día, año));
Por ejemplo
echo date('N', mktime(0,0,0,7,1,2017));// will return 6
echo date('D', mktime(0,0,0,7,1,2017));// will return Sat
echo date('l', mktime(0,0,0,7,1,2017));// will return Saturday
Todas esas expresiones php especiales, en espíritu de, first day of ...son geniales, aunque salen de mi cabeza una y otra vez.
Así que decidí construir un par de abstracciones básicas de fecha y hora y toneladas de implementación específica que cualquier IDE completa automáticamente. El punto es encontrar qué tipo de cosas. Al igual que, today, now, the first day of a previous month, etc. Todas esas cosas que he enumerado son datetimes. Por lo tanto, hay una interfaz o clase abstracta llamada ISO8601DateTime, y fechas específicas que la implementan.
El código en su caso particular se ve así:
(newTheFirstDayOfThisMonth(newNow()))->value();
Para obtener más información sobre este enfoque, eche un vistazo a esta entrada .
Respuestas:
Requiere PHP 5.3 para funcionar ("primer día de" se introduce en PHP 5.3). De lo contrario, el ejemplo anterior es la única forma de hacerlo:
En PHP 5.4+ puedes hacer esto:
Si prefiere una forma concisa de hacerlo, y ya tiene el año y el mes en valores numéricos, puede usar
date()
:fuente
->modify()
si solo desea el primer día del mes actual . Puede pasar'first day of this month'
al constructor DateTime directamente como:$date = new DateTime('first day of this month')
. Solo digo ...Esto es lo que uso.
Primer día del mes:
Último día del mes:
fuente
date('Y-m-t');
.date('w', '2015-05-01');
entonces termino con el día anterior en lugar del día real. (Esto me daría 4 en lugar de los 5 correctos).$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
Esto es todo lo que necesitas:
fuente
strtotime('first day of this month', time())
, regresará el primer día y la hora es la misma que la actual. Por lo tanto, no es el primer día a las 0:00 en punto, es el primer día y ahora es el momento. Esto lo arreglastrtotime('first day of this month 00:00:00', time())
.Actualmente estoy usando esta solución:
El único problema que encontré es que se está estableciendo un tiempo extraño. Necesitaba el rango correcto para nuestra interfaz de búsqueda y terminé con esto:
fuente
Utilizo una forma loca de hacer esto usando este comando
Eso es todo
fuente
En php 5.2 puedes usar:
fuente
Feo, (y no usa la llamada a su método anterior) pero funciona:
fuente
last day of {$month} {$year}
olast day of this month
ambos funcionan. Pero tenga en cuenta que $ month tendría que ser una cadena que contenga el nombre del mes como "enero", todo el tiempo pensado para "Decemember". O simplemente podrías usarlodate('Y-m-t');
.Puedes hacerlo así:
fuente
Utilizo esto con un trabajo cron diario para verificar si debo enviar un correo electrónico el primer día de cualquier mes a mis afiliados. Son unas pocas líneas más que las otras respuestas pero sólidas como una roca.
fuente
utilizando el método de fecha, deberíamos poder obtener el resultado. es decir; fecha ('N / D / l', mktime (0, 0, 0, mes, día, año));
Por ejemplo
fuente
Todas esas expresiones php especiales, en espíritu de,
first day of ...
son geniales, aunque salen de mi cabeza una y otra vez.Así que decidí construir un par de abstracciones básicas de fecha y hora y toneladas de implementación específica que cualquier IDE completa automáticamente. El punto es encontrar qué tipo de cosas. Al igual que,
today
,now
,the first day of a previous month
, etc. Todas esas cosas que he enumerado son datetimes. Por lo tanto, hay una interfaz o clase abstracta llamadaISO8601DateTime
, y fechas específicas que la implementan.El código en su caso particular se ve así:
Para obtener más información sobre este enfoque, eche un vistazo a esta entrada .
fuente