Как найти день недели в php в определенный часовой пояс

Я запутался при использовании php для обработки даты / времени.

То, что я пытаюсь сделать, это следующее: когда пользователь посещает мою страницу, я спрашиваю его часовой пояс, а затем показываю «день недели» в своем часовом поясе.

Я не хочу использовать день браузера. Я хочу сделать это вычисление в php.

Вот как я пытаюсь это сделать:

  1. Часовой пояс, введенный пользователем
  2. Временная метка Unix, вычисленная функцией php time ().

Но я не знаю, как продолжить … Как я получу «день недели» в этом часовом поясе.

$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'));