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

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

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

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

Вот как я пытаюсь этого добиться:

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

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

90 голосов | спросил varun 3 AMpFri, 03 Apr 2009 10:41:36 +040041Friday 2009, 10:41:36

9 ответов


0
$dw = date( "w", $timestamp);

Где $ dw будет 0 (для воскресенья) - 6 (для субботы), как вы можете видеть здесь: http://www.php.net/manual/en/function.date.php

ответил Botond Béres 3 AMpFri, 03 Apr 2009 11:47:55 +040047Friday 2009, 11:47:55
0

Мое решение таково:

$tempDate = '2012-07-10';
echo date('l', strtotime( $tempDate));

Вывод: Tuesday

$tempDate = '2012-07-10';
echo date('D', strtotime( $tempDate));

Вывод: Tue

ответил trante 10 J000000Tuesday12 2012, 00:19:55
0

Большое спасибо, ребята, за ваши быстрые комментарии.

Это то, что я буду использовать сейчас. Разместите здесь функцию, чтобы кто-нибудь мог ее использовать.

public function getDayOfWeek($pTimezone)
{

    $userDateTimeZone = new DateTimeZone($pTimezone);
    $UserDateTime = new DateTime("now", $userDateTimeZone);

    $offsetSeconds = $UserDateTime->getOffset(); 
    //echo $offsetSeconds;

    return gmdate("l", time() + $offsetSeconds);

}

Сообщайте, если найдете какие-либо исправления.

ответил 3 PMpFri, 03 Apr 2009 12:22:35 +040022Friday 2009, 12:22:35
0

Я думаю, что это правильный ответ, просто измените 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

ответил cjohansson 25 +03002016-10-25T14:43:08+03:00312016bEurope/MoscowTue, 25 Oct 2016 14:43:08 +0300 2016, 14:43:08
0

Еще один быстрый способ:

date_default_timezone_set($userTimezone);
echo date("l");
ответил Andre 19 +04002010-10-19T03:22:45+04:00312010bEurope/MoscowTue, 19 Oct 2010 03:22:45 +0400 2010, 03:22:45
0

Если вы можете получить смещение часового пояса, вы можете просто добавить его к текущей отметке времени и затем использовать gmdate . функция, чтобы получить их местное время.

// let's say they're in the timezone GMT+10
$theirOffset = 10;  // $_GET['offset'] perhaps?
$offsetSeconds = $theirOffset * 3600;
echo gmdate("l", time() + $offsetSeconds);
ответил nickf 3 AMpFri, 03 Apr 2009 10:58:10 +040058Friday 2009, 10:58:10
0
$myTimezone = date_default_timezone_get();
date_default_timezone_set($userTimezone);
$userDay = date('l', $userTimestamp);
date_default_timezone_set($myTimezone);

Это должно работать (не проверял, поэтому YMMV). Он работает, сохраняя текущий часовой пояс скрипта, меняя его на указанный пользователем, получая день недели из функции date() в указанной отметке времени, а затем установите часовой пояс сценария обратно в исходное состояние.

Однако у вас могут быть некоторые приключения с идентификаторами часовых поясов.

ответил Kalium 3 AMpFri, 03 Apr 2009 10:50:27 +040050Friday 2009, 10:50:27
0

«День недели» - это то, что вы можете получить непосредственно из функции php date () в формате «l» или «N» соответственно. Посмотри на руководство

edit: Извините, я не прочитал должным образом сообщения Kalium, он уже объяснил это. Мой плохой.

ответил HerdplattenToni 3 AMpFri, 03 Apr 2009 11:41:50 +040041Friday 2009, 11:41:50
0

На основе одного из других решений с флажком для переключения между неделями, начинающимися в воскресенье или понедельник

function getWeekForDate($date, $weekStartSunday = false){

    $timestamp = strtotime($date);

    // Week starts on Sunday
    if($weekStartSunday){
        $start = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Sunday', $timestamp));
        $end = (date("D", $timestamp) == 'Sat') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Saturday', $timestamp));
    } else { // Week starts on Monday
        $start = (date("D", $timestamp) == 'Mon') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Monday', $timestamp));
        $end = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Sunday', $timestamp));
    }

    return array('start' => $start, 'end' => $end);
}
ответил Drinkynet 9 PMpWed, 09 Apr 2014 20:15:45 +040015Wednesday 2014, 20:15:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132