Ich kann den Montag dieser Woche bekommen mit:
$monday = date_create()->modify('this Monday');
Ich möchte mit der gleichen Leichtigkeit den 1. dieses Monats bekommen. Wie kann ich das erreichen?
Ich kann den Montag dieser Woche bekommen mit:
$monday = date_create()->modify('this Monday');
Ich möchte mit der gleichen Leichtigkeit den 1. dieses Monats bekommen. Wie kann ich das erreichen?
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:
<?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+ können Sie dies tun:
<?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');
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
->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:
date('Y-m-01');
Ultimo:
date('Y-m-t');
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:
$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())
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())
.
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');
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"));
Das ist alles
Hässlich (und verwendet Ihren oben genannten Methodenaufruf nicht), funktioniert aber:
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}
oder last 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 verwenden date('Y-m-t');
.
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 stop
if($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 month
etc. 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:
(new TheFirstDayOfThisMonth(new Now()))->value();
Weitere Informationen zu diesem Ansatz finden Sie in diesem Eintrag .