2011-01-20 17 views
37

Może to być bardzo proste, ale nie mogę znaleźć funkcji PHP, aby to zrobić ...PHP dni tygodnia numeryczne, aby dzień tygodnia tekst

OK więc

$dow_numeric = date('w'); 

daje dzień numeryczną tygodnia 0-6 na niedzielę do soboty.

I

$dow_text = date('D'); 

daje skrót literowy 3 dnia tekstowym tygodnia (Sun, Mon, etc.)

Czy istnieje funkcja lub łatwy sposób wykorzystać $dow_numeric dostać $dow_text? Jeśli mam "0" jako $dow_numeric, jak mogę utworzyć $dow_text = 'Sun'? Tak, oświadczenie switch może wykonać tę pracę, ale szukam bardziej eleganckiego rozwiązania.

Odpowiedz

25

Utwórz tablicę, aby odwzorować numeryczne obiekty DOW na tekst DOW.

$dowMap = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); 

Jeśli potrzebujesz wsparcia locale, załaduj Dow jakiejś przypadkowej daty (epoka (0) byłaby dobra data na przykład), a następnie przez kolejne 6 dni i zbudować mapę dow dynamicznie.

+0

Super łatwy i zgadza ... więc biorę to nie jest funkcja już chociaż. – csi

+1

Sprytny hack, który na nowo odkrywa koło :) – peter

101

bit hack, ale:

$dow_text = date('D', strtotime("Sunday +{$dow_numeric} days")); 
+14

To nie jest hacky, jest śliski! ;-) – acme

+1

Idealny, sprytny. – Bendoh

+5

Można również użyć opcji 'date ('l')' (małe litery * L *) dla nazwy pełnej. [więcej informacji] (http://php.net/manual/en/function.date.php#refsect1-funkcja.data-parametry) –

1

To powinno działać:

$dow_numeric = 3; 

$last_sunday = strtotime('last Sunday'); 
$dow_text = date('D', strtotime('+'.$dow_numeric.' day', $last_sunday)); 
44

To nie jest popularne, ale jest rzeczywiście funkcją jddayofweek za to w PHP. Możesz nazwać go drugim parametrem jako 1, aby uzyskać pełną nazwę gregoriańskiego dnia tygodnia lub 2 dla nazwy skróconej.

e.g. jddayofweek(2, 2); #returns Wed 

Pamiętaj, że w przypadku tej funkcji numery zaczynają się od poniedziałku. Więc poniedziałek = 0, wtorek = 1, ...

+1

Domyślnym początkiem tygodnia jest poniedziałek. Więc jeśli twoja niedziela == 0, wszystko jest wyłączone o jeden dzień. Miej to w pamięci. – testing123

+11

To powinna być najlepsza odpowiedź. –

+0

Dlaczego nie jest popularny? –

2
function getDay(){ 
    $dowMap = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); 
    $dow_numeric = date('w'); 
    return $dowMap[$dow_numeric]; 
} 
1

Aby uzyskać niedzieli do soboty z numerycznym dzień tygodnia 0 do 6:

//For example, our target numeric day is 0 (Sunday): 
$numericDay = 0; //assuming current date('w')==0 and date('D')=='Sun'; 

Solution-1 : Korzystanie z wbudowanej funkcji PHP jddayofweek(), która rozpoczyna się od Monday, natomiast date('w') rozpoczyna się od Sunday:

jddayofweek($numericDay-1, 1); //returns 'Sun', here decreasing by '-1' is important(!) 

//jddayofweek(0, 1); //returns 'Mon'; 
//jddayofweek(0, 2); //returns 'Monday'; 

Solution-2: Korzystanie trick (!):

date('D', strtotime("Sunday +{$numericDay} days")); //returns 'Sun'; 

//date('l', strtotime("Sunday +{$numericDay} days")); //returns 'Sunday'; 
+1

Świetny pomysł z 'strtotime'! –

Powiązane problemy