2011-01-20 4 views
37

Это может быть очень легко, но я не могу найти функцию PHP, чтобы сделать это ...PHP день недели числового день недели текст

ИТАК

$dow_numeric = date('w'); 

дает числовой день недели 0-6 на воскресенье до субботы.

И

$dow_text = date('D'); 

дает 3 буквенное сокращение текста дня недели (вс, пн и т.д.)

Есть функция или простой способ использовать $dow_numeric получить $dow_text? Если у меня есть 0, как $dow_numeric, как я могу сделать $dow_text = 'Sun'? Да, заявление switch может выполнить эту работу, но я ищу более элегантное решение.

ответ

25

Создайте массив для сопоставления числовых DOWs с текстом DOWs.

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

Если вам нужна локаль поддержку, загрузите Дау некоторой случайной даты (эпоха (0) была бы хорошая дата, например), а затем в течение следующих 6 дней и построить карту DOW динамически.

+0

Супер легкий и согласен ... так что я беру его там нет функции уже хотя. – csi

+1

Умный хак, который изобретает колесо :) – peter

101

хака, но:

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

Это не хаки, это пятно! ;-) – acme

+1

Идеальный, умный. – Bendoh

+5

В качестве альтернативы используйте «date ('l») '(нижний регистр * L *) для полного имени дня. [подробнее] (http://php.net/manual/en/function.date.php#refsect1-функция.date-parameters) –

1

Это должно работать:

$dow_numeric = 3; 

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

Это не популярно, но есть фактически функция jddayofweek для этого в PHP. Вы можете вызвать его со вторым параметром как 1, чтобы получить полное имя дня gregorian week day или 2 для сокращенного имени.

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

Обратите внимание, что для этой функции цифры начинаются в понедельник. Таким образом, понедельник = 0, вторник = 1, ...

+1

По умолчанию начало недели - понедельник. Поэтому, если ваше воскресенье == 0, все отключено на один день. Запомни. – testing123

+11

Это должен быть лучший ответ. –

+0

Почему он не популярен? –

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

Чтобы получить воскресенье в субботу с цифровой день недели 0 до 6:

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

Solution-1 : Использование встроенной функции PHP jddayofweek(), которая начинается с Monday, тогда как date('w') начинается с 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: Используя трюк (!):

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

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

Отличная идея с 'strtotime'! –

Смежные вопросы