El primer día del mes actual en php usando date_modify como objeto DateTime


157

Puedo recibir el lunes de esta semana con:

$monday = date_create()->modify('this Monday');

Me gustaría llegar con la misma facilidad el 1 de este mes. ¿Cómo puedo lograr eso?


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 = new DateTime('first day of this month');
    echo $d->format('jS, F Y');

    // First day of a specific month
    $d = new DateTime('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 (new DateTime('first day of this month'))->format('jS, F Y');

    echo (new DateTime('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

9
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 ...
Dzhuneyt

334

Esto es lo que uso.

Primer día del mes:

date('Y-m-01');

Último día del mes:

date('Y-m-t');

10
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/>';

44
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"));

Eso es todo


6

En php 5.2 puedes usar:

<? $d = date_create();
print date_create($d->format('Y-m-1'))->format('Y-m-d') ?>

4

Feo, (y no usa la llamada a su método anterior) pero funciona:

echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));   

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');

3

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 stop
if($day != "01") {

     echo "error - it's not the first of the month today";
     exit;

}

2

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

0

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í:

(new TheFirstDayOfThisMonth(new Now()))->value();

Para obtener más información sobre este enfoque, eche un vistazo a esta entrada .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.