Это может быть очень просто, но я не могу найти функцию PHP для этого …
Итак
$dow_numeric = date('w');
дает числовой день недели 0-6 для воскресенья по субботу.
А также
$dow_text = date('D');
дает аббревиатуру 3-х символов для текстового дня недели (Sun, Mon и т. д.)
Есть ли функция или простой способ использовать $dow_numeric
для получения $dow_text
? Если у меня есть «0» как $dow_numeric
, как я могу сделать $dow_text = 'Sun'
? Да, оператор switch
может выполнить эту работу, но я ищу более элегантное решение.
Создайте массив для сопоставления числовых DOWs с текстом DOW.
$dowMap = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
Если вам нужна поддержка локали, загрузите dow какой-то случайной даты (например, эпоха (0) будет хорошей датой), а затем в течение следующих 6 дней и динамически создайте карту dow.
Немного взлома, но:
$dow_text = date('D', strtotime("Sunday +{$dow_numeric} days"));
Это не популярно, но на самом деле в PHP есть функция jddayofweek
. Вы можете вызвать его со вторым параметром как 1, чтобы получить полное имя дня gregorian week day или 2 для сокращенного имени.
eg jddayofweek(2, 2); #returns Wed
Обратите внимание, что для этой функции номера начинаются в понедельник. Итак, понедельник = 0, вторник = 1, …
Это должно работать:
$dow_numeric = 3; $last_sunday = strtotime('last Sunday'); $dow_text = date('D', strtotime('+'.$dow_numeric.' day', $last_sunday));
function getDay(){ $dowMap = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); $dow_numeric = date('w'); return $dowMap[$dow_numeric]; }
Чтобы получить воскресенье до субботы с числового дня недели 0 до 6 :
//For example, our target numeric day is 0 (Sunday): $numericDay = 0; //assuming current date('w')==0 and date('D')=='Sun';
Решение-1: Использование встроенной функции PHP jddayofweek (), которая начинается с Monday
то date('w')
как 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';