2010-06-02 11 views
10

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

+1

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

Odpowiedz

6
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 
} 
+0

Daje to datę tygodnia, jeśli dzisiaj jest poniedziałek. – nickf

+0

@nickf: zobacz zaktualizowaną odpowiedź. Przypomniałem sobie, że po tym, jak napisałem .. :) –

+1

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. –

9
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.

+0

1 na poniedziałek, 2 wtorek, 3 w środę i tak dalej :) wypróbuj .. – apis17

+0

ten jest bardziej ważny – r4ccoon

+2

Cóż, to nie daje poprzedniego poniedziałku, jeśli spróbujesz tego kodu w niedzielę! – ErcanE

0

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"; 
?> 
12

Spróbuj tego:

return strtotime('last monday', strtotime('next sunday')); 
+0

A co, jeśli dziś jest niedziela? :) –

+0

@ mr.b - wtedy powinno nadal działać zgodnie z oczekiwaniami (zakładając, że niedziela jest początkiem tygodnia) – nickf

+0

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

2

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.

3

$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

70

Easisest sposób:

$time = strtotime('monday this week'); 
+4

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. –

+0

+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

+1

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

1

Spróbuj

$day_of_week = date("N") - 1; 
$monday_time = strtotime("-$day_of_week days"); 
Powiązane problemy