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.