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?
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?
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:
<?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
->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:
date('Y-m-01');
Último día del mes:
date('Y-m-t');
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:
$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/>';
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()).
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');
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
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')))));
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');.
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;
}
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í:
(new TheFirstDayOfThisMonth(new Now()))->value();
Para obtener más información sobre este enfoque, eche un vistazo a esta entrada .