Muszę znaleźć datę poniedziałku w bieżącym tygodniu. Jak mogę to zrobić w PHP 4?Pobierz datę poniedziałku w bieżącym tygodniu w PHP 4
Odpowiedz
echo date('Y-m-d', strtotime('previous monday'));
Tylko jedna uwaga. Chcesz się upewnić, że dzisiaj nie jest poniedziałek, w przeciwnym razie dostaniesz datę poprzednia poniedziałek, tak jak to mówi. Można to zrobić w następujący sposób
if (date('w') == 1)
{
// today is monday
}
else
{
// find last monday
}
Daje to datę tygodnia, jeśli dzisiaj jest poniedziałek. – nickf
@nickf: zobacz zaktualizowaną odpowiedź. Przypomniałem sobie, że po tym, jak napisałem .. :) –
Starannie z verbiage, którego używasz z strtotime, "poprzedni poniedziałek" dostaniesz tydzień temu w poniedziałki, kiedy naprawdę chcesz bieżącego dnia. IIRC, w tym tygodniu w php oznacza poniedziałek do niedzieli, ale jeśli miałbyś zastosować swoją odpowiedź, by znaleźć na przykład datę wtorek, to dałoby to zły wynik zarówno w poniedziałek, jak i wtorek. –
echo date('Y-m-d',time()+(1 - date('w'))*24*3600);
na następny tydzień:
echo date('Y-m-d',time()+(8 - date('w'))*24*3600);
1 dla poniedziałku, 2 Wtorek, 3 środę i tak dalej. Spróbuj.
Moja próba:
<?php
$weekday = date("w") - 1;
if ($weekday < 0)
{
$weekday += 7;
}
echo "Monday this week : ", date("Y-m-d",time() - $weekday * 86400) , "\n";
?>
Spróbuj tego:
return strtotime('last monday', strtotime('next sunday'));
A co, jeśli dziś jest niedziela? :) –
@ mr.b - wtedy powinno nadal działać zgodnie z oczekiwaniami (zakładając, że niedziela jest początkiem tygodnia) – nickf
To jest moje ulubione rozwiązanie, aby uzyskać poniedziałek o 00:00:00. Innym (mniej eleganckim) sposobem na uzyskanie tego jest 'mktime (0,0,0, data (" m "), data (" j ") - data (" N ") + 1, data (" Y "))' – neokio
Spróbuj tego.
echo date('Y-m-d', strtotime('last monday', strtotime('next monday')));
Zwróci bieżącą datę, jeśli dzisiaj jest poniedziałek, i wróci w ostatni poniedziałek inaczej. Przynajmniej robi to na moim PHP 5.2.4 w locie en_US.
$thisMonday = date('l, F d, Y', time() - ((date('w')-1) * 86400));
Edycja: wyjaśnienia
date('w')
jest numeryczną reprezentację dnia tygodnia (0 = niedzielę, 6 = sobota)- są 86400 sekund w dniu
- bierzemy bieżący czas i odejmujemy (jeden dzień * (dzień tygodnia - 1))
Tak więc, jeśli jest to obecnie środa (dzień 3), od poniedziałku jest dwa dni temu:
time() - (86400 * (3 - 1))
= time() - 86400 * 2
Jeśli jest to poniedziałek (dzień 1), otrzymujemy:
time() - (86400 * (1 - 1))
= time() - 86400 * 0
= time()
Jeśli jest niedziela (dzień 0), poniedziałek jest jutro.
time() - (86400 * (0 - 1))
= time() - -86400
= time() + 86400
Easisest sposób:
$time = strtotime('monday this week');
Hah! Kiedy oni (powiedzmy) (http://php.net/manual/en/function.strtotime.php) "Parsują o dowolnym angielskim datetime opisie w uniksowym znaczniku czasu", naprawdę to znaczą, prawda? +1 dla najbardziej czytelnego rozwiązania. –
+1! Naprawdę łatwe rozwiązanie. Cieszę się, że szukałem tego, ponieważ już budowałem skomplikowaną konstrukcję, aby ustalić datę poniedziałku. Typo: '' strotime' powinno być 'strtotime'. – Alec
dzisiaj jest czwartek 2012/05/17 (Y-m-d), kiedy robię echo (data ("Y-m-d", strtotime ("poniedziałek w tym tygodniu"))); idzie 2012/05/21, który jest poniedziałek w przyszłym tygodniu – r4ccoon
Spróbuj
$day_of_week = date("N") - 1;
$monday_time = strtotime("-$day_of_week days");
naprawdę czuję do konieczności pracy w PHP4, ponieważ data funkcjonalność PHP5 jest * waaaay * lepszy.PHP4 jest już oficjalnie End-Of-Life już od jakiegoś czasu, więc nie będzie już żadnych łatek i prawdopodobnie nie jest bezpieczne - nie powinno już być w użyciu. – Spudley