Posso ottenere il lunedì di questa settimana con:
$monday = date_create()->modify('this Monday');
Vorrei ottenere con la stessa facilità il 1 ° di questo mese. Come posso raggiungerlo?
Posso ottenere il lunedì di questa settimana con:
$monday = date_create()->modify('this Monday');
Vorrei ottenere con la stessa facilità il 1 ° di questo mese. Come posso raggiungerlo?
Risposte:
Richiede PHP 5.3 per funzionare (il "primo giorno di" è introdotto in PHP 5.3). Altrimenti l'esempio sopra è l'unico modo per farlo:
<?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');
In PHP 5.4+ puoi fare questo:
<?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');
Se preferisci un modo conciso per farlo e hai già l'anno e il mese in valori numerici, puoi usare 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()
se vuoi solo il primo giorno del mese corrente . È possibile passare 'first day of this month'
al costruttore DateTime direttamente come: $date = new DateTime('first day of this month')
.
Ecco cosa uso.
Primo giorno del mese:
date('Y-m-01');
Ultimo giorno del mese:
date('Y-m-t');
date('Y-m-t');
.
date('w', '2015-05-01');
finisco con il giorno prima anziché il giorno effettivo. (Questo mi darebbe 4 invece del 5 corretto).
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
Questo è tutto ciò di cui hai bisogno:
$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())
tornerà il primo giorno e l'orario è lo stesso di quello attuale. Quindi lì, non è il primo giorno alle 0:00, il suo primo giorno e come è l'ora. Questo lo risolve strtotime('first day of this month 00:00:00', time())
.
Attualmente sto usando questa soluzione:
$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');
L'unico problema che ho riscontrato è che è stato fissato uno strano momento. Avevo bisogno di un intervallo corretto per la nostra interfaccia di ricerca e ho finito con questo:
$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');
Uso un modo folle per fare questo è usare questo comando
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
È tutto
Brutto (e non usa la tua chiamata di metodo sopra) ma funziona:
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 month
entrambi funzionano. Ma tieni presente che $ month dovrebbe essere una stringa contenente il nome del mese come "gennaio" fino in fondo a "dicembre". O potresti semplicemente usare date('Y-m-t');
.
Lo uso con un lavoro cron giornaliero per verificare se devo inviare un'e-mail il primo giorno di un determinato mese ai miei affiliati. Sono poche più righe delle altre risposte ma solide come una roccia.
//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;
}
usando il metodo della data, dovremmo essere in grado di ottenere il risultato. ie; data ('N / D / l', mktime (0, 0, 0, mese, giorno, anno));
Per esempio
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
Tutte quelle espressioni speciali di php, in spirito di first day of ...
sono grandiose, anche se escono dalla mia testa più volte.
Così ho deciso di costruire un paio di astrazioni di base per il datetime e tonnellate di implementazione specifica che vengono completate automaticamente da qualsiasi IDE. Il punto è trovare quale genere di cose. Come, today
, now
, the first day of a previous month
, ecc Tutte queste cose che ho elencato sono datetimes. Quindi, vi è un'interfaccia o una classe astratta chiamata ISO8601DateTime
e specifici periodi di dati che la implementano.
Il codice nel tuo caso particolare è simile al seguente:
(new TheFirstDayOfThisMonth(new Now()))->value();
Per ulteriori informazioni su questo approccio, dai un'occhiata a questa voce .