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 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');.
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 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:
(new TheFirstDayOfThisMonth(new Now()))->value();
Weitere Informationen zu diesem Ansatz finden Sie in diesem Eintrag .