PHP день недели от цифры дня недели - PullRequest
45 голосов
/ 20 января 2011

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

ОК, поэтому

$dow_numeric = date('w');

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

И

$dow_text = date('D');

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

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

Ответы [ 7 ]

117 голосов
/ 20 января 2011

Немного взлома, но:

$dow_text = date('D', strtotime("Sunday +{$dow_numeric} days"));
57 голосов
/ 07 июня 2015

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

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

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

32 голосов
/ 20 января 2011

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

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

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

5 голосов
/ 24 ноября 2017

Чтобы получить с воскресенья по субботу с числового дня недели 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';

Решение-2: Использование трюка (!):

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

//date('l', strtotime("Sunday +{$numericDay} days")); //returns 'Sunday';
2 голосов
/ 12 декабря 2016
function getDay(){
    $dowMap = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
    $dow_numeric = date('w');
    return $dowMap[$dow_numeric];
}
1 голос
/ 19 марта 2019

Если вам нужна поддержка локали, вы можете использовать немного улучшенную функцию Ответ Хэмиша :

Пример использования немецких дней недели:

setlocale(LC_TIME, 'de_DE');
$dow_numeric = 3;
$dow_text = strftime('%A', strtotime("Sunday +{$dow_numeric} days"));

http://php.net/strftime

Если $dow_numeric начинается с 0 (0 = понедельник), вы можете просто изменить Sunday на Monday или добавить $dow_numeric += 1

1 голос
/ 20 января 2011

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

$dow_numeric = 3;

$last_sunday = strtotime('last Sunday');
$dow_text = date('D', strtotime('+'.$dow_numeric.' day', $last_sunday));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...