Was meinst du mit dem ersten Tag der Woche? Meinst du Sonne, Mo? Oder meinst du das Datum des ersten Tages der Woche?
Jeffrey Hines
2
Der erste Tag der Woche ist konstant: Es ist Montag (oder möglicherweise Sonntag). Meinen Sie damit, dass Sie das Datum des Montags vor einem bestimmten beliebigen Datum erhalten möchten?
Jon Cram
Welche Version von PHP - 4 oder 5?
Jon Cram
das Datum des Sonntags der Woche. PHP 5
Iggy Ma
Seltsamerweise bittet er um eine DateTimeLösung und die meisten Antworten liefern sie nicht. =)
$ day enthält eine Zahl von 0 bis 6, die den Wochentag darstellt (Sonntag = 0, Montag = 1 usw.). $ week_start enthält das Datum für den Sonntag der aktuellen Woche als MM-TT-JJJJ. $ week_end enthält das Datum für den Samstag der aktuellen Woche als MM-TT-JJJJ.
this weekfunktioniert nicht, wenn Sie immer den vorherigen Wochenbeginn haben müssen, aber @ LewisBuckleys Kommentar macht es.
Smar
Das zweite Argument time()ist optional, wenn Sie heute angeben möchten.
Ifnot
hat bei mir nicht funktioniert, ich musste für YTD, MTD, WTD eine etwas andere Syntax verwenden.
Ron
6
Diese Antwort führt je nach verwendeter PHP-Version zu inkonsistenten Ergebnissen: 3v4l.org/Z3k4E @ LewisBuckleys Lösung ist für alle Versionen konsistent
Relative Beschreibungen wie diese Woche haben ihren eigenen Kontext. Das Folgende zeigt die Ausgabe für diese Woche Montag und Sonntag, wenn es ein Montag oder ein Sonntag ist:
$date ='2015-03-16';// monday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))),"\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))),"\n";
$date ='2015-03-22';// sunday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))),"\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))),"\n";
Warum funktioniert das nicht für das Datum 2016-06-05, es gibt Daten für die nächsten Wochen.
1
Vielen Dank dafür, ich habe gerade diesen Code geändert, damit ich einen optionalen Datumsparameter $ dt = $ custom_date? Übergeben kann. strtotime ($ custom_date): time (); $ Montag = Datum ("Ymd", Strtotime ('Montag diese Woche', $ dt)); $ sonntag = Datum ("Ymd", strtotime ('Sonntag diese Woche', $ dt));
Ron Michael
47
Halte es einfach :
<?php
$dateTime =new \DateTime('2020-04-01');
$monday = clone $dateTime->modify(('Sunday'== $dateTime->format('l'))?'Monday last week':'Monday this week');
$sunday = clone $dateTime->modify('Sunday this week');?>
edit: Tippfehler oder unbekannte Syntax? Woher kommt das \? $dateTime = new \DateTime('2012-05-14');
Sliq
2
Ich mache dies, um Konflikte mit einem möglichen automatisch geladenen Objekt Ihrer Anwendung zu vermeiden. Das ist wie ein absoluter Pfad oder ein relativer Pfad.
job3dot5
9
@Panique - Die "unbekannte Syntax" ist die Namespace-Syntax von PHP 5.3. Mit Namespacing können Sie einer Klasse einen Namespace gefolgt von einem Backslash voranstellen. Hier verwendet er es ohne Namespace, um die Kernklasse anzugeben. Dies DateTimebedeutet, dass der Code auch dann funktioniert, wenn DateTimeim aktuellen Namespace eine andere Klasse aufgerufen wird .
Spudley
Ist der Tagesname immer auf Englisch?
Marwelln
1
Klonteil funktioniert nicht richtig. Sie sollten zuerst klonen und dann den Klon ausführen, wenn Sie das Original benötigen.
Farid Movsumov
25
$givenday = date("w", mktime(0,0,0, MM, dd, yyyy));
Dies gibt Ihnen den Wochentag des angegebenen Datums an, an dem 0= Sonntag und 6= Samstag. Von dort aus können Sie einfach rückwärts zum gewünschten Tag rechnen.
Diese Antwort gibt zurück, ob ein bestimmtes Datum Sonntag oder Montag usw. ist. Der Fragesteller hat jedoch nach dem Datum des Sonntags der Woche des angegebenen Datums gefragt, wie in seinem Kommentar zur ursprünglichen Frage erwähnt.
Rakib
19
Diese Frage braucht eine gute DateTime- Antwort: -
function firstDayOfWeek($date){
$day =DateTime::createFromFormat('m-d-Y', $date);
$day->setISODate((int)$day->format('o'),(int)$day->format('W'),1);return $day->format('m-d-Y');}
var_dump(firstDayOfWeek('06-13-2013'));
Ausgabe:-
string'06-10-2013'(length=10)
Dies wird sich mit Jahresgrenzen und Schaltjahren befassen.
BEARBEITEN: Der folgende Link läuft nicht mehr auf der angegebenen PHP-Version. Es läuft auf PHP 5.6, was die Zuverlässigkeit von strtotime verbessert, aber nicht perfekt ist! Die Ergebnisse in der Tabelle sind Live-Ergebnisse aus PHP 5.6.
Für das, was es wert ist, hier eine Aufschlüsselung des wackeligen Verhaltens von strtotime bei der Bestimmung eines konsistenten Referenzrahmens:
Grundsätzlich erhalten Sie nur mit diesen Zeichenfolgen zuverlässig das gleiche Datum, unabhängig davon, an welchem Wochentag Sie sich gerade befinden, wenn Sie sie aufrufen:
Der Artikel gab auch einen bestimmten Code zur Verwendung an: $ start_of_week = strtotime ("nächster Montag - 1 Woche"); // Wird am Montag der aktuellen Woche ab 00:00:00 Uhr "$ end_of_week = strtotime (" nächster Montag - 1 Sekunde ") zurückkehren; // Wird am Sonntag der aktuellen Woche bis 23:59:59 Uhr"
Scott zurückkehren M. Stolz
11
Der folgende Code sollte mit jedem benutzerdefinierten Datum funktionieren, verwendet nur das gewünschte Datumsformat.
Beachten Sie, dass dies immer den vorherigen Montag zurückgibt. Wenn also $ custom_date ein Montag ist, wird das Datum des Montags eine Woche früher zurückgegeben.
Hill79
2
Funktioniert nicht richtig, heute ist Sonntag, Ergebnisse sind: Start: 09-09-2013 Ende: 22-09-2013
user2019515
10
Unter der Annahme, dass Montag der erste Tag der Woche ist, funktioniert dies:
"MM-TT-JJJJ" ist nicht dasselbe wie "YMD". Bitte passen Sie Ihre Antwort an die Besonderheiten der Frage an.
Jewgenij Afanasjew
1
Datum ("MM-TT-JJJJ") gibt das Datum wie folgt aus: NovNov-0202-15151515. Ich hoffe, es sollte sein: Datum ("Mdy"), das ein lesbares Datum ausgibt wie: 02.11.15
Shasi Kanth
"MM-TT-JJJJ" kommt von der Frage. Wenn Sie nicht sicher sind, was es bedeutet, stellen Sie es in einem Kommentar zur Frage. Vielen Dank, dass Sie Ihre Antwort geändert haben.
Der letzte Montag am Montag gibt Ihnen den vorherigen Montag.
Ikke
8
Dies ist, was ich benutze, um den ersten und letzten Tag der Woche von jedem Datum zu erhalten . In diesem Fall ist Montag der erste Tag der Woche ...
$date = date('Y-m-d')// you can put any date you want
$nbDay = date('N', strtotime($date));
$monday =newDateTime($date);
$sunday =newDateTime($date);
$monday->modify('-'.($nbDay-1).' days');
$sunday->modify('+'.(7-$nbDay).' days');
Mit der folgenden PHP-Version vor 5.3 erhalten Sie mit der folgenden Funktion einen ersten Tag der Woche mit dem angegebenen Datum (in diesem Fall - Sonntag, 03.02.2013):
<?php
function startOfWeek($aDate){
$d=strtotime($aDate);return strtotime(date('Y-m-d',$d).' - '.date("w",$d).' days');}
echo(date('Y-m-d',startOfWeek("2013-02-07")).'
');?>
Sie müssen zuerst am nächsten Montag und dann am letzten Montag den nächsten Montag bekommen. Wenn also das angegebene Datum Montag ist, wird das gleiche Datum nicht letzte Woche Montag zurückgegeben.
Was macht dies dieser Antwort oder dieser Antwort vorzuziehen ? Mir scheint, es gibt mehr als genug Optionen in den 30 anderen Antworten ...
Mogsdad
Vielen Dank. Dies ist eine einfache Lösung und funktioniert wie ein Zauber.
Oleg Popov
2
Eine clevere Möglichkeit, dies zu tun, besteht darin, PHP Zeitzonenunterschiede und Sommerzeit (DST) verarbeiten zu lassen. Lassen Sie mich Ihnen zeigen, wie das geht.
Diese Funktion generiert alle Tage von Montag bis einschließlich Freitag (praktisch zum Generieren von Wochentagen):
Dies gibt die Daten von Montag bis Freitag für die aktuelle Woche zurück. Um dasselbe für ein beliebiges Datum zu tun, übergeben Sie ein Datum als Parameter an DateTimeUtilities ::getPeriodFromMondayUntilFriday:
<?php
/* PHP 5.3.0 */
date_default_timezone_set('America/Denver');//Set apprpriate timezone
$start_date = strtotime('2009-12-15');//Set start date//Today's date if $start_date is a Sunday, otherwise date of previous Sunday
$today_or_previous_sunday = mktime(0,0,0, date('m', $start_date), date('d', $start_date), date('Y', $start_date))-((date("w", $start_date)==0)?0:(86400* date("w", $start_date)));//prints 12-13-2009 (month-day-year)
echo date('m-d-Y', $today_or_previous_sunday);?>
(Hinweis: MM, TT und JJJJ in der Frage sind keine Standardsyntax für das PHP-Datumsformat. Ich kann nicht sicher sein, was gemeint ist, daher setze ich das $ start_date mit ISO Jahr-Monat-Tag.)
Nützlich, wenn wir Montag als ersten Tag der Woche (Mo-So) haben.
Kamran Mushtaq
0
Ich bin ein paar Mal auf diese Frage gestoßen und immer überrascht, dass die Datumsfunktionen dies nicht einfacher oder klarer machen. Hier ist meine Lösung für PHP5, die die DateTimeKlasse verwendet:
/**
* @param DateTime $date A given date
* @param int $firstDay 0-6, Sun-Sat respectively
* @return DateTime
*/function getFirstDayOfWeek(DateTime $date, $firstDay =0){
$offset =7- $firstDay;
$ret = clone $date;
$ret->modify(-(($date->format('w')+ $offset)%7).'days');return $ret;}
Klonen erforderlich, um eine Änderung des ursprünglichen Datums zu vermeiden.
$date ="2013-03-18";
$searchRow = date("d.m.Y", strtotime('last monday',strtotime($date." + 1 day")));
echo "for date ".$date ." we get this monday: ";echo $searchRow; echo '<br>';
Es ist nicht der beste Weg, aber ich habe getestet und wenn ich in dieser Woche bin, bekomme ich den richtigen Montag, und wenn ich an einem Montag bin, werde ich diesen Montag bekommen.
DateTime
Lösung und die meisten Antworten liefern sie nicht. =)Antworten:
Hier ist was ich benutze ...
$ day enthält eine Zahl von 0 bis 6, die den Wochentag darstellt (Sonntag = 0, Montag = 1 usw.).
$ week_start enthält das Datum für den Sonntag der aktuellen Woche als MM-TT-JJJJ.
$ week_end enthält das Datum für den Samstag der aktuellen Woche als MM-TT-JJJJ.
quelle
Zeit ersetzen (). Die Methoden für den nächsten Sonntag / letzten Montag funktionieren nicht, wenn der aktuelle Tag Sonntag / Montag ist.
quelle
$monday = strtotime('last monday', strtotime('tomorrow'));
this week
funktioniert nicht, wenn Sie immer den vorherigen Wochenbeginn haben müssen, aber @ LewisBuckleys Kommentar macht es.time()
ist optional, wenn Sie heute angeben möchten.Sehr einfach zu bedienende
strtotime
Funktion :Es unterscheidet sich ein wenig zwischen den PHP-Versionen :
Ausgabe für 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Ausgabe für 4.3.5 - 5.2.17
Ausgabe für 4.3.0 - 4.3.4
Vergleichen bei Edge-Cases
Relative Beschreibungen wie diese Woche haben ihren eigenen Kontext. Das Folgende zeigt die Ausgabe für diese Woche Montag und Sonntag, wenn es ein Montag oder ein Sonntag ist:
Againt es unterscheidet sich ein bisschen zwischen PHP-Versionen :
Ausgabe für 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Ausgabe für 4.3.5 - 5.0.5, 5.2.0 - 5.2.17
Ausgabe für 5.1.0 - 5.1.6
Ausgabe für 4.3.0 - 4.3.4
quelle
Halte es einfach :
Quelle: PHP-Handbuch
NB: Wie einige Benutzer kommentierten, wird der Wert von $ dateTime geändert.
quelle
$dateTime = new \DateTime('2012-05-14');
DateTime
bedeutet, dass der Code auch dann funktioniert, wennDateTime
im aktuellen Namespace eine andere Klasse aufgerufen wird .Dies gibt Ihnen den Wochentag des angegebenen Datums an, an dem
0
= Sonntag und6
= Samstag. Von dort aus können Sie einfach rückwärts zum gewünschten Tag rechnen.quelle
Diese Frage braucht eine gute DateTime- Antwort: -
Ausgabe:-
Dies wird sich mit Jahresgrenzen und Schaltjahren befassen.
quelle
BEARBEITEN: Der folgende Link läuft nicht mehr auf der angegebenen PHP-Version. Es läuft auf PHP 5.6, was die Zuverlässigkeit von strtotime verbessert, aber nicht perfekt ist! Die Ergebnisse in der Tabelle sind Live-Ergebnisse aus PHP 5.6.
Für das, was es wert ist, hier eine Aufschlüsselung des wackeligen Verhaltens von strtotime bei der Bestimmung eines konsistenten Referenzrahmens:
http://gamereplays.org/reference/strtotime.php
Grundsätzlich erhalten Sie nur mit diesen Zeichenfolgen zuverlässig das gleiche Datum, unabhängig davon, an welchem Wochentag Sie sich gerade befinden, wenn Sie sie aufrufen:
quelle
Der folgende Code sollte mit jedem benutzerdefinierten Datum funktionieren, verwendet nur das gewünschte Datumsformat.
Ich habe den Code mit PHP 5.2.17 getestet. Ergebnisse:
quelle
Unter der Annahme, dass Montag der erste Tag der Woche ist, funktioniert dies:
quelle
Wie wäre es damit?
quelle
Dies ist, was ich benutze, um den ersten und letzten Tag der Woche von jedem Datum zu erhalten . In diesem Fall ist Montag der erste Tag der Woche ...
quelle
Hier betrachte ich Sonntag als ersten und Samstag als letzten Tag der Woche.
Ausgabe :
Beginn: 05.08.2012
Ende: 08.11.2012
quelle
Wie wäre es damit?
quelle
Versuche dies:
(aus diesem Forenthread )
quelle
Dies ist die kürzeste und am besten lesbare Lösung, die ich gefunden habe:
strtotime
ist schneller alsnew DateTime()->getTimestamp()
.quelle
Benutz einfach
date($format, strtotime($date,' LAST SUNDAY + 1 DAY'));
quelle
Mit der folgenden PHP-Version vor 5.3 erhalten Sie mit der folgenden Funktion einen ersten Tag der Woche mit dem angegebenen Datum (in diesem Fall - Sonntag, 03.02.2013):
quelle
quelle
Sie müssen zuerst am nächsten Montag und dann am letzten Montag den nächsten Montag bekommen. Wenn also das angegebene Datum Montag ist, wird das gleiche Datum nicht letzte Woche Montag zurückgegeben.
quelle
Wenn Sie den Montag als Beginn Ihrer Woche wünschen, gehen Sie folgendermaßen vor:
quelle
Eine clevere Möglichkeit, dies zu tun, besteht darin, PHP Zeitzonenunterschiede und Sommerzeit (DST) verarbeiten zu lassen. Lassen Sie mich Ihnen zeigen, wie das geht.
Diese Funktion generiert alle Tage von Montag bis einschließlich Freitag (praktisch zum Generieren von Wochentagen):
Dies gibt die Daten von Montag bis Freitag für die aktuelle Woche zurück. Um dasselbe für ein beliebiges Datum zu tun, übergeben Sie ein Datum als Parameter an
DateTimeUtilities ::getPeriodFromMondayUntilFriday
:Nur am Montag interessiert, wie das OP gefragt hat?
quelle
Sie analysieren das Datum mit
strptime()
und verwenden esdate()
für das Ergebnis:quelle
(Hinweis: MM, TT und JJJJ in der Frage sind keine Standardsyntax für das PHP-Datumsformat. Ich kann nicht sicher sein, was gemeint ist, daher setze ich das $ start_date mit ISO Jahr-Monat-Tag.)
quelle
Ein anderer Weg, es zu tun ....
quelle
Der einfachste Weg, um den ersten Tag (Montag) der aktuellen Woche zu erhalten, ist:
Dabei ist 604800 - die Anzahl der Sekunden in 1 Woche (60 * 60 * 24 * 7).
Dieser Code wird nächsten Montag abgerufen und für 1 Woche verringert. Dieser Code funktioniert an jedem Wochentag. Auch wenn heute Montag ist.
quelle
Ich fand das ziemlich frustrierend, da meine Zeitzone australisch ist und das
strtotime()
britische Daten hasst.Wenn der aktuelle Tag ein Sonntag ist,
strtotime("monday this week")
wird der Tag danach zurückgegeben.Um dies zu überwinden:
quelle
Hier ist ein Einzeiler für den ersten Tag der letzten Woche und den letzten Tag der letzten Woche als
DateTime
Objekt.quelle
quelle
Ich bin ein paar Mal auf diese Frage gestoßen und immer überrascht, dass die Datumsfunktionen dies nicht einfacher oder klarer machen. Hier ist meine Lösung für PHP5, die die
DateTime
Klasse verwendet:Klonen erforderlich, um eine Änderung des ursprünglichen Datums zu vermeiden.
quelle
Wie wäre es mit:
Es ist nicht der beste Weg, aber ich habe getestet und wenn ich in dieser Woche bin, bekomme ich den richtigen Montag, und wenn ich an einem Montag bin, werde ich diesen Montag bekommen.
quelle