Я запутался при использовании php для обработки даты / времени.
Я пытаюсь сделать следующее: когда пользователь посещает мою страницу, я спрашиваю его часовой пояс, а затем показываю «день недели» в его часовом поясе.
Я не хочу пользоваться браузером днем. Я хочу сделать этот расчет на php.
Вот как я пытаюсь этого добиться:
- Часовой пояс, введенный пользователем
- Отметка времени Unix, рассчитанная функцией php time ().
Но я не знаю, как действовать ... Как мне получить «день недели» в этом часовом поясе.
date("N", $timestamp)
для получения1..7
значений, начиная с понедельника. В более старых версиях вы можете использовать эту уловку(date("w", $timestamp) + 6) % 7
для получения0..6
значений, начиная с понедельника.Мое решение таково:
Выход:
Tuesday
Выход:
Tue
источник
Я думаю, что это правильный ответ, просто измените
Europe/Stockholm
часовой пояс пользователя.http://php.net/manual/en/function.date.php
Список поддерживаемых часовых поясов см. На http://php.net/manual/en/timezones.php.
источник
Большое спасибо, ребята, за ваши быстрые комментарии.
Это то, что я буду использовать сейчас. Размещение функции здесь, чтобы кто-нибудь мог ее использовать.
Сообщите, если обнаружите какие-либо исправления.
источник
Еще один быстрый способ:
источник
Если вы можете получить смещение их часового пояса, вы можете просто добавить его к текущей метке времени, а затем использовать функцию gmdate, чтобы получить их местное время.
источник
Это должно работать (не тестировал, поэтому YMMV). Он работает, сохраняя текущий часовой пояс сценария, меняя его на указанный пользователем, получая день недели от
date()
функции с указанной меткой времени, а затем устанавливая часовой пояс сценария обратно на тот, с которого он был в начале.Однако у вас могут быть приключения с идентификаторами часовых поясов.
источник
«День недели» - это то, что вы можете получить непосредственно из функции php date () в формате «l» или «N» соответственно. Взгляните на руководство
edit: Извините, я не прочитал должным образом сообщения Kalium, он уже объяснил это. Виноват.
источник
Дата проверки - понедельник или воскресенье, до последнего понедельника или последнего воскресенья.
источник
На основе одного из других решений с флагом для переключения между неделями, начиная с воскресенья или понедельника.
источник
Стандартные буквенные представления частей даты - это здорово, за исключением того факта, что они не так интуитивно понятны. Намного более удобный способ - определить базовые абстракции и ряд конкретных реализаций. Кроме того, при таком подходе вы можете воспользоваться автозаполнением.
Поскольку здесь мы говорим о датах, кажется вероятным, что основная абстракция - это
ISO8601DateTime
. Одна из конкретных реализаций - current datetime, та, которая вам нужна, когда a делает запрос к вашему бэкэнду, следовательно,Now()
class. Второй вариант, который может вам пригодиться, - это дата и время, скорректированное на некоторый часовой пояс. Неудивительно, что это называетсяAdjustedAccordingToTimeZone
. И, наконец, вам нужен день недели в часовом поясе прошедшего datetime: для этого естьLocalDayOfWeek
класс. Итак, код выглядит следующим образом:Подробнее об этом подходе читайте здесь .
источник
источник