Co masz na myśli mówiąc o pierwszym dniu tygodnia? Masz na myśli Sun, Mon? Czy masz na myśli datę pierwszego dnia tygodnia?
Jeffrey Hines
2
Pierwszy dzień tygodnia jest stały: jest poniedziałek (ewentualnie niedziela). Czy chodzi o to, że chcesz uzyskać datę poniedziałku poprzedzającego daną dowolną datę?
Jon Cram
Jaka wersja PHP - 4 czy 5?
Jon Cram
data niedzieli tygodnia. php 5
Iggy Ma
Dziwne, on prosi o DateTimerozwiązanie i większość odpowiedzi go nie dostarcza. =)
$ dzień zawiera liczbę od 0 do 6 reprezentującą dzień tygodnia (niedziela = 0, poniedziałek = 1 itd.). $ week_start zawiera datę niedzieli bieżącego tygodnia w formacie mm-dd-rrrr. $ week_end zawiera datę soboty bieżącego tygodnia w formacie mm-dd-rrrr.
this weeknie działa, jeśli musisz mieć zawsze poprzedni początek tygodnia, ale komentarz @ LewisBuckley to robi.
Smar
Drugi argument time()to opcja, jeśli chcesz określić dzisiaj.
Ifnot
u mnie nie zadziałało, musiałem ustawić nieco inną składnię dla YTD, MTD, WTD.
Ron,
6
Ta odpowiedź daje niespójne wyniki, w zależności od używanej wersji PHP: 3v4l.org/Z3k4E @ LewisBuckley Rozwiązanie jest spójne dla wszystkich wersji: 3v4l.org/Eeh9c
Względne opisy, takie jak ten tydzień, mają swój własny kontekst. Poniżej przedstawiono dane wyjściowe dla poniedziałku i niedzieli w tym tygodniu, kiedy jest poniedziałek lub niedziela:
$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";
dlaczego to nie działa na datę 2016-06-05, podaje daty następnych tygodni.
1
Dzięki za to, właśnie zmodyfikowałem ten kod, aby móc przekazać opcjonalny parametr daty $ dt = $ custom_date? strtotime ($ custom_date): time (); $ poniedziałek = data ("Ymd", strtotime ('poniedziałek tego tygodnia', $ dt)); $ sunday = date ("Ymd", strtotime ('niedziela tego tygodnia', $ dt));
Ron Michael
47
Nie komplikuj :
<?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');?>
edycja: literówka lub nieznana składnia? skąd pochodzi \? $dateTime = new \DateTime('2012-05-14');
Sliq
2
Robię to, aby uniknąć konfliktu z możliwym automatycznie ładowanym obiektem twojej aplikacji. To jak ścieżka bezwzględna lub ścieżka względna.
job3dot5
9
@Panique - „nieznana składnia” to składnia przestrzeni nazw PHP 5.3. Przestrzenie nazw umożliwiają poprzedzanie klasy przestrzenią nazw, po której następuje ukośnik odwrotny. Tutaj używa go bez przestrzeni nazw, aby określić DateTimeklasę podstawową , co oznacza, że kod będzie działał, nawet jeśli masz inną klasę wywołaną DateTimew bieżącej przestrzeni nazw.
Spudley
Czy nazwa dnia jest zawsze w języku angielskim?
Marwelln
1
Część klonowana nie działa poprawnie. Powinieneś najpierw sklonować, a następnie wykonać operację na klonie, jeśli potrzebujesz oryginalnego.
Farid Movsumov
25
$givenday = date("w", mktime(0,0,0, MM, dd, yyyy));
To daje ci dzień tygodnia podanej daty, gdzie 0= niedziela i 6= sobota. Stamtąd możesz po prostu obliczyć wstecz do żądanego dnia.
Ta odpowiedź zwraca, czy dana data to niedziela, czy poniedziałek itp. Jednak pytający zapytał o datę niedzieli tygodnia z podanej daty, jak wspomniano w komentarzu do pierwotnego pytania.
EDYTUJ: poniższe łącze nie działa już w podanej wersji PHP. Działa na PHP 5.6, co poprawia niezawodność strtotime, ale nie jest idealne! Wyniki w tabeli są wynikami na żywo z PHP 5.6.
Co jest warte, oto rozbicie dziwacznego zachowania strtotime podczas określania spójnego układu odniesienia:
„MM-dd-yyyy” to nie to samo, co „Ymd”, dostosuj odpowiedź do specyfiki pytania.
Yevgeniy Afanasyev
1
date („MM-dd-yyyy”) wyświetla datę jako: NovNov-0202-15151515. Mam nadzieję, że powinno to być: data („Mdy”), która wyświetla czytelną datę, na przykład: 02-15 listopada
shasi kanth
Z pytania pochodzi „MM-dd-yyyy”. Jeśli nie jesteś pewien, co to znaczy - zapytaj w komentarzu do pytania. Dziękuję za zmianę odpowiedzi.
Ostatni poniedziałek w poniedziałek da ci poprzedni poniedziałek.
Ikke
8
Właśnie tego używam, aby uzyskać pierwszy i ostatni dzień tygodnia z dowolnej daty . W tym przypadku poniedziałek to pierwszy dzień tygodnia ...
$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');
Najpierw musisz dostać następny poniedziałek, a następnie „ostatni poniedziałek” następnego poniedziałku. Więc jeśli podana data to poniedziałek, zwróci tę samą datę, ale nie w poniedziałek w zeszłym tygodniu.
Spowoduje to wyświetlenie dat od poniedziałku do piątku w bieżącym tygodniu. Aby zrobić to samo dla dowolnej daty, przekaż datę jako parametr do DateTimeUtilities ::getPeriodFromMondayUntilFriday, w ten sposób:
<?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);?>
(Uwaga: MM, dd i rrrr w pytaniu nie są standardową składnią formatu daty php - nie jestem pewien, o co chodzi, więc ustawiłem $ start_date z ISO rok-miesiąc-dzień)
Najłatwiejszym sposobem na uzyskanie pierwszego dnia (poniedziałek) bieżącego tygodnia jest:
strtotime("next Monday")-604800;
gdzie 604800 - to liczba sekund w ciągu 1 tygodnia (60 * 60 * 24 * 7).
Ten kod otrzyma w następny poniedziałek i zmniejszy go na 1 tydzień. Ten kod będzie działał dobrze w każdy dzień tygodnia. Nawet jeśli dzisiaj jest poniedziałek.
Przydatne, gdy mamy poniedziałek jako pierwszy dzień tygodnia (pon.-niedz.).
Kamran Mushtaq
0
Kilka razy spotkałem się z tym pytaniem i zawsze byłem zaskoczony, że funkcje daty nie ułatwiają tego ani nie ułatwiają tego. Oto moje rozwiązanie dla PHP5, które używa DateTimeklasy:
/**
* @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;}
Konieczne do klonowania, aby uniknąć zmiany pierwotnej daty.
$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>';
To nie jest najlepszy sposób, ale przetestowałem i jeśli jestem w tym tygodniu, dostaję właściwy poniedziałek, a jeśli będę w poniedziałek, dostanę ten poniedziałek.
DateTime
rozwiązanie i większość odpowiedzi go nie dostarcza. =)Odpowiedzi:
Oto, czego używam ...
$ dzień zawiera liczbę od 0 do 6 reprezentującą dzień tygodnia (niedziela = 0, poniedziałek = 1 itd.).
$ week_start zawiera datę niedzieli bieżącego tygodnia w formacie mm-dd-rrrr.
$ week_end zawiera datę soboty bieżącego tygodnia w formacie mm-dd-rrrr.
źródło
Zastąp czas (). Metody na następną niedzielę / ostatni poniedziałek nie będą działać, jeśli bieżącym dniem jest niedziela / poniedziałek.
źródło
$monday = strtotime('last monday', strtotime('tomorrow'));
this week
nie działa, jeśli musisz mieć zawsze poprzedni początek tygodnia, ale komentarz @ LewisBuckley to robi.time()
to opcja, jeśli chcesz określić dzisiaj.Bardzo prosta w obsłudze
strtotime
funkcja :Trochę różni się w zależności od wersji PHP :
Wyjście dla 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Wyjście dla 4.3.5 - 5.2.17
Wyjście dla 4.3.0 - 4.3.4
Porównanie z Edge-Cases
Względne opisy, takie jak ten tydzień, mają swój własny kontekst. Poniżej przedstawiono dane wyjściowe dla poniedziałku i niedzieli w tym tygodniu, kiedy jest poniedziałek lub niedziela:
Jednak różni się nieco w wersjach PHP :
Wyjście dla 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Wyjście dla 4.3.5 - 5.0.5, 5.2.0 - 5.2.17
Wyjście dla 5.1.0 - 5.1.6
Wyjście dla 4.3.0 - 4.3.4
źródło
Nie komplikuj :
Źródło: podręcznik PHP
Uwaga: jak zauważył jakiś użytkownik, wartość $ dateTime zostanie zmodyfikowana.
źródło
$dateTime = new \DateTime('2012-05-14');
DateTime
klasę podstawową , co oznacza, że kod będzie działał, nawet jeśli masz inną klasę wywołanąDateTime
w bieżącej przestrzeni nazw.To daje ci dzień tygodnia podanej daty, gdzie
0
= niedziela i6
= sobota. Stamtąd możesz po prostu obliczyć wstecz do żądanego dnia.źródło
To pytanie wymaga dobrej odpowiedzi DateTime : -
Wynik:-
Dotyczy to granic lat i lat przestępnych.
źródło
EDYTUJ: poniższe łącze nie działa już w podanej wersji PHP. Działa na PHP 5.6, co poprawia niezawodność strtotime, ale nie jest idealne! Wyniki w tabeli są wynikami na żywo z PHP 5.6.
Co jest warte, oto rozbicie dziwacznego zachowania strtotime podczas określania spójnego układu odniesienia:
http://gamereplays.org/reference/strtotime.php
Zasadniczo tylko te ciągi niezawodnie podają tę samą datę, niezależnie od dnia tygodnia, w którym aktualnie się do nich dzwonisz:
źródło
Poniższy kod powinien działać z dowolną niestandardową datą, po prostu używa żądanego formatu daty.
Przetestowałem kod w PHP 5.2.17 Wyniki:
źródło
Zakładając, że poniedziałek jest pierwszym dniem tygodnia, działa to:
źródło
Co powiesz na to?
źródło
Właśnie tego używam, aby uzyskać pierwszy i ostatni dzień tygodnia z dowolnej daty . W tym przypadku poniedziałek to pierwszy dzień tygodnia ...
źródło
Tutaj uważam niedzielę za pierwszy, a sobotę za ostatni dzień tygodnia.
Wynik :
Początek: 05-08-2012
Koniec: 11-08-2012
źródło
Co powiesz na to?
źródło
Spróbuj tego:
(z tego wątku na forum )
źródło
To najkrótsze i najbardziej czytelne rozwiązanie, jakie znalazłem:
strtotime
jest szybszy niżnew DateTime()->getTimestamp()
.źródło
Po prostu użyj
date($format, strtotime($date,' LAST SUNDAY + 1 DAY'));
źródło
Dla wersji PHP przed 5.3 poniższa funkcja podaje pierwszy dzień tygodnia o podanej dacie (w tym przypadku - niedziela, 2013-02-03):
źródło
źródło
Najpierw musisz dostać następny poniedziałek, a następnie „ostatni poniedziałek” następnego poniedziałku. Więc jeśli podana data to poniedziałek, zwróci tę samą datę, ale nie w poniedziałek w zeszłym tygodniu.
źródło
Jeśli chcesz, aby poniedziałek był początkiem tygodnia, zrób to:
źródło
Sprytnym sposobem na zrobienie tego jest umożliwienie PHP obsługi różnic w strefach czasowych i czasu letniego (DST). Pokażę ci, jak to zrobić.
Ta funkcja wygeneruje wszystkie dni od poniedziałku do piątku włącznie (przydatne do generowania dni roboczych):
Spowoduje to wyświetlenie dat od poniedziałku do piątku w bieżącym tygodniu. Aby zrobić to samo dla dowolnej daty, przekaż datę jako parametr do
DateTimeUtilities ::getPeriodFromMondayUntilFriday
, w ten sposób:Zainteresowany tylko poniedziałkiem, jak pytał PO?
źródło
Analizujesz datę za pomocą
strptime()
i używaszdate()
na wyniku:źródło
(Uwaga: MM, dd i rrrr w pytaniu nie są standardową składnią formatu daty php - nie jestem pewien, o co chodzi, więc ustawiłem $ start_date z ISO rok-miesiąc-dzień)
źródło
Inny sposób na zrobienie tego ....
źródło
Najłatwiejszym sposobem na uzyskanie pierwszego dnia (poniedziałek) bieżącego tygodnia jest:
gdzie 604800 - to liczba sekund w ciągu 1 tygodnia (60 * 60 * 24 * 7).
Ten kod otrzyma w następny poniedziałek i zmniejszy go na 1 tydzień. Ten kod będzie działał dobrze w każdy dzień tygodnia. Nawet jeśli dzisiaj jest poniedziałek.
źródło
Uznałem to za dość frustrujące, biorąc pod uwagę, że moja strefa czasowa jest australijska i nie
strtotime()
znosi dat w Wielkiej Brytanii.Jeśli bieżącym dniem jest niedziela,
strtotime("monday this week")
nastąpi powrót następnego dnia.Aby temu zaradzić:
źródło
Oto jedna linijka na pierwszy dzień zeszłego tygodnia i ostatni dzień ostatniego tygodnia jako
DateTime
obiekt.źródło
źródło
Kilka razy spotkałem się z tym pytaniem i zawsze byłem zaskoczony, że funkcje daty nie ułatwiają tego ani nie ułatwiają tego. Oto moje rozwiązanie dla PHP5, które używa
DateTime
klasy:Konieczne do klonowania, aby uniknąć zmiany pierwotnej daty.
źródło
Co powiesz na:
To nie jest najlepszy sposób, ale przetestowałem i jeśli jestem w tym tygodniu, dostaję właściwy poniedziałek, a jeśli będę w poniedziałek, dostanę ten poniedziałek.
źródło