Я запутался при использовании php для обработки даты / времени.
То, что я пытаюсь сделать, это следующее: когда пользователь посещает мою страницу, я спрашиваю его часовой пояс, а затем показываю «день недели» в своем часовом поясе.
Я не хочу использовать день браузера. Я хочу сделать это вычисление в php.
Вот как я пытаюсь это сделать:
Но я не знаю, как продолжить … Как я получу «день недели» в этом часовом поясе.
$dw = date( "w", $timestamp);
Где $ dw будет 0 (для воскресенья) до 6 (для субботы), как вы можете видеть здесь: http://www.php.net/manual/en/function.date.php
Мое решение таково:
$tempDate = '2012-07-10'; echo date('l', strtotime( $tempDate));
Выход: Tuesday
$tempDate = '2012-07-10'; echo date('D', strtotime( $tempDate));
Выход: Tue
Большое спасибо ребятам за ваши быстрые комментарии.
Это то, что я буду использовать сейчас. Публикация функции здесь, чтобы кто-то мог ее использовать.
public function getDayOfWeek($pTimezone) { $userDateTimeZone = new DateTimeZone($pTimezone); $UserDateTime = new DateTime("now", $userDateTimeZone); $offsetSeconds = $UserDateTime->getOffset(); //echo $offsetSeconds; return gmdate("l", time() + $offsetSeconds); }
Сообщите, если найдете какие-либо исправления.
Еще один быстрый способ:
date_default_timezone_set($userTimezone); echo date("l");
Я думаю, что это правильный ответ, просто измените Europe/Stockholm
на часовую зону пользователей.
$dateTime = new \DateTime( 'now', new \DateTimeZone('Europe/Stockholm') ); $day = $dateTime->format('N');
ISO-8601 числовое представление дня недели (добавлено в PHP 5.1.0) 1 (для понедельника) до 7 (для воскресенья)
http://php.net/manual/en/function.date.php
Список поддерживаемых часовых поясов см. На странице http://php.net/manual/en/timezones.php
Если вы можете получить их смещение по часовой стрелке, вы можете просто добавить его в текущую временную метку, а затем использовать функцию gmdate, чтобы получить свое местное время.
// let's say they're in the timezone GMT+10 $theirOffset = 10; // $_GET['offset'] perhaps? $offsetSeconds = $theirOffset * 3600; echo gmdate("l", time() + $offsetSeconds);
$myTimezone = date_default_timezone_get(); date_default_timezone_set($userTimezone); $userDay = date('l', $userTimestamp); date_default_timezone_set($myTimezone);
Это должно работать (не тестировалось, поэтому YMMV). Он работает, сохраняя текущий часовой пояс сценария, меняя его на тот, который указан пользователем, получая день недели с функции date()
в указанной временной отметке, а затем устанавливая часовой пояс сценария назад, с чего он должен был начинать с ,
Тем не менее, у вас могут быть некоторые приключения с идентификаторами часовых поясов.
«День недели» – это то, что вы можете получить непосредственно из функции php date () в формате «l» или «N» соответственно. Взгляните на руководство
Извините, я не читал сообщения Kalium правильно, он уже объяснил это. Виноват.
Дата проверки – понедельник или воскресенье, прежде чем вы получите последний понедельник или последнее воскресенье
public function getWeek($date){ $date_stamp = strtotime(date('Ym-d', strtotime($date))); //check date is sunday or monday $stamp = date('l', $date_stamp); $timestamp = strtotime($date); //start week if(date('D', $timestamp) == 'Mon'){ $week_start = $date; }else{ $week_start = date('Ym-d', strtotime('Last Monday', $date_stamp)); } //end week if($stamp == 'Sunday'){ $week_end = $date; }else{ $week_end = date('Ym-d', strtotime('Next Sunday', $date_stamp)); } return array($week_start, $week_end); }
На основе одного из других решений с флагом переключаться между неделями, начиная с воскресенья или понедельника
function getWeekForDate($date, $weekStartSunday = false){ $timestamp = strtotime($date); // Week starts on Sunday if($weekStartSunday){ $start = (date("D", $timestamp) == 'Sun') ? date('Ym-d', $timestamp) : date('Ym-d', strtotime('Last Sunday', $timestamp)); $end = (date("D", $timestamp) == 'Sat') ? date('Ym-d', $timestamp) : date('Ym-d', strtotime('Next Saturday', $timestamp)); } else { // Week starts on Monday $start = (date("D", $timestamp) == 'Mon') ? date('Ym-d', $timestamp) : date('Ym-d', strtotime('Last Monday', $timestamp)); $end = (date("D", $timestamp) == 'Sun') ? date('Ym-d', $timestamp) : date('Ym-d', strtotime('Next Sunday', $timestamp)); } return array('start' => $start, 'end' => $end); }
echo date('l', strtotime('today'));