Äh, ich bin in Schwierigkeiten, John Conde hat die Frage beantwortet, die ich beantwortet habe, aber ich vergesse zu erwähnen, dass es an 5.2 funktionieren muss, also werde ich tatsächlich Mr-
sks
Antworten:
260
Erfordert PHP 5.3 zum Arbeiten ("erster Tag von" wird in PHP 5.3 eingeführt). Ansonsten ist das obige Beispiel der einzige Weg, dies zu tun:
<?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');
In PHP 5.4+ können Sie dies tun:
<?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');
Wenn Sie eine präzise Methode bevorzugen und Jahr und Monat bereits in numerischen Werten angegeben haben, können Sie Folgendes verwenden 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
Beachten Sie, dass Sie nicht durchlaufen müssen, ->modify()wenn Sie nur den ersten Tag des aktuellen Monats möchten . Sie können 'first day of this month'direkt an den DateTime-Konstruktor übergeben : $date = new DateTime('first day of this month').
Dies ist IMO bei weitem die einfachste und am besten lesbare Möglichkeit, dies zu lösen, wenn Sie lediglich eine Zeichenfolgendarstellung des Datums benötigen.
Markus Amalthea Magnuson
5
Letzter Tag des Monats konnte dann mit gepackt werden date('Y-m-t');.
Mark Tomlin
7
Zu Ihrer Information: Das Datum 't' ('Ym-t') gibt immer die Anzahl der Tage in diesem Monat an. Eine großartige und einfache Möglichkeit, den letzten Tag des aktuellen Monats abzurufen.
Pascal Klein
1
Wenn ich damit versuche, den Wochentag zu ermitteln, erhalte date('w', '2015-05-01');ich den Tag zuvor anstelle des tatsächlichen Tages. (Dies würde mir 4 statt der richtigen 5 geben).
PBwebD
5
Das ist einfach genial. Ich habe es ein wenig erweitert, um die $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
minimalen
32
Das ist alles was Sie brauchen:
$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/>';
Dies ist eine saubere Lösung, die jedoch strtotime('first day of this month', time())am ersten Tag zurückgegeben wird und deren Uhrzeit der aktuellen entspricht. Also da, es ist nicht der erste Tag um 0:00 Uhr, der erste Tag und wie es jetzt ist. Dies behebt es strtotime('first day of this month 00:00:00', time()).
Kalle H. Väravas
22
Derzeit verwende ich diese Lösung:
$firstDay =new \DateTime('first day of this month');
$lastDay =new \DateTime('last day of this month');
Das einzige Problem, auf das ich gestoßen bin, ist, dass eine seltsame Zeit eingestellt wird. Ich brauchte den richtigen Bereich für unsere Suchoberfläche und kam zu folgendem Ergebnis:
$firstDay =new \DateTime('first day of this month 00:00:00');
$lastDay =new \DateTime('first day of next month 00:00:00');
Das ist cool, aber ich habe einige Probleme am ersten Tag des Monats. Also, wenn heute der 1. September ist, 11 Uhr. Ich werde den 1. August bekommen! Ich muss tatsächlich prüfen, ob es heute der "1." ist, und wenn ja, "jetzt" verwenden. seltsam (Php 7.3.9)
Jacob Christensen
@JacobChristensen hat das noch nicht erlebt. Wie hast du das behoben?
Nikola Petkanski
Sehr wahr, PHP-Nähte sind nicht sehr cool über diese erste und letzte. $ n = new \ DateTime ('erster Tag von'. (new \ DateTime ()) -> Format ('F')); "erster Tag im Januar". Gleiches passiert für die Woche, wenn es Montag ist und es ein bisschen ... frustrierend ist :)
Jacob Christensen
20
Ich benutze einen verrückten Weg, um dies zu tun, indem ich diesen Befehl benutze
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
aus dem Thema heraus, aber wie würden Sie den letzten Tag des Monats unter dem gleichen Szenario berechnen.
LoneWOLFs
@ LoneWOLFs last day of {$month} {$year}oder last day of this monthbeide funktionieren. Aber denken Sie daran, dass $ month eine Zeichenfolge sein muss, die den Namen des Monats wie "January" bis "Decemember" enthält. Oder Sie könnten einfach verwenden date('Y-m-t');.
Mark Tomlin
3
Sie können es so machen:
$firstday = date_create()->modify('first day January 2010');
Ich verwende dies mit einem täglichen Cron-Job, um zu überprüfen, ob ich am ersten Tag eines bestimmten Monats eine E-Mail an meine Partner senden soll. Es sind ein paar Zeilen mehr als die anderen Antworten, aber steinhart.
//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;}
Mit der Datumsmethode sollten wir in der Lage sein, das Ergebnis zu erhalten. dh; Datum ('N / D / l', mktime (0, 0, 0, Monat, Tag, Jahr));
Beispielsweise
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
Alle diese speziellen PHP-Ausdrücke sind im Geiste von first day of ...großartig, obwohl sie mir immer wieder aus dem Kopf gehen.
Deshalb habe ich mich entschlossen, ein paar grundlegende Datetime-Abstraktionen und eine Menge spezifischer Implementierungen zu erstellen, die von jeder IDE automatisch vervollständigt werden. Es geht darum, welche Art von Dingen zu finden . Wie, today, now, the first day of a previous monthetc. All diese Dinge , die ich aufgelistet habe sind Datetimes. Daher gibt es eine Schnittstelle oder eine abstrakte Klasse, die aufgerufen wird ISO8601DateTime, und bestimmte Datenzeiten, die sie implementieren.
Der Code in Ihrem speziellen Fall sieht folgendermaßen aus:
(newTheFirstDayOfThisMonth(newNow()))->value();
Weitere Informationen zu diesem Ansatz finden Sie in diesem Eintrag .
Antworten:
Erfordert PHP 5.3 zum Arbeiten ("erster Tag von" wird in PHP 5.3 eingeführt). Ansonsten ist das obige Beispiel der einzige Weg, dies zu tun:
In PHP 5.4+ können Sie dies tun:
Wenn Sie eine präzise Methode bevorzugen und Jahr und Monat bereits in numerischen Werten angegeben haben, können Sie Folgendes verwenden
date()
:quelle
->modify()
wenn Sie nur den ersten Tag des aktuellen Monats möchten . Sie können'first day of this month'
direkt an den DateTime-Konstruktor übergeben :$date = new DateTime('first day of this month')
.Hier ist was ich benutze.
Erster Tag des Monats:
Ultimo:
quelle
date('Y-m-t');
.date('w', '2015-05-01');
ich den Tag zuvor anstelle des tatsächlichen Tages. (Dies würde mir 4 statt der richtigen 5 geben).$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
Das ist alles was Sie brauchen:
quelle
strtotime('first day of this month', time())
am ersten Tag zurückgegeben wird und deren Uhrzeit der aktuellen entspricht. Also da, es ist nicht der erste Tag um 0:00 Uhr, der erste Tag und wie es jetzt ist. Dies behebt esstrtotime('first day of this month 00:00:00', time())
.Derzeit verwende ich diese Lösung:
Das einzige Problem, auf das ich gestoßen bin, ist, dass eine seltsame Zeit eingestellt wird. Ich brauchte den richtigen Bereich für unsere Suchoberfläche und kam zu folgendem Ergebnis:
quelle
Ich benutze einen verrückten Weg, um dies zu tun, indem ich diesen Befehl benutze
Das ist alles
quelle
In PHP 5.2 können Sie verwenden:
quelle
Hässlich (und verwendet Ihren oben genannten Methodenaufruf nicht), funktioniert aber:
quelle
last day of {$month} {$year}
oderlast day of this month
beide funktionieren. Aber denken Sie daran, dass $ month eine Zeichenfolge sein muss, die den Namen des Monats wie "January" bis "Decemember" enthält. Oder Sie könnten einfach verwendendate('Y-m-t');
.Sie können es so machen:
quelle
Ich verwende dies mit einem täglichen Cron-Job, um zu überprüfen, ob ich am ersten Tag eines bestimmten Monats eine E-Mail an meine Partner senden soll. Es sind ein paar Zeilen mehr als die anderen Antworten, aber steinhart.
quelle
Mit der Datumsmethode sollten wir in der Lage sein, das Ergebnis zu erhalten. dh; Datum ('N / D / l', mktime (0, 0, 0, Monat, Tag, Jahr));
Beispielsweise
quelle
Alle diese speziellen PHP-Ausdrücke sind im Geiste von
first day of ...
großartig, obwohl sie mir immer wieder aus dem Kopf gehen.Deshalb habe ich mich entschlossen, ein paar grundlegende Datetime-Abstraktionen und eine Menge spezifischer Implementierungen zu erstellen, die von jeder IDE automatisch vervollständigt werden. Es geht darum, welche Art von Dingen zu finden . Wie,
today
,now
,the first day of a previous month
etc. All diese Dinge , die ich aufgelistet habe sind Datetimes. Daher gibt es eine Schnittstelle oder eine abstrakte Klasse, die aufgerufen wirdISO8601DateTime
, und bestimmte Datenzeiten, die sie implementieren.Der Code in Ihrem speziellen Fall sieht folgendermaßen aus:
Weitere Informationen zu diesem Ansatz finden Sie in diesem Eintrag .
quelle