Ответ 1
$dw = date( "w", $timestamp);
Где $dw будет 0 (для воскресенья) до 6 (для субботы), как вы можете видеть здесь: http://www.php.net/manual/en/function.date.php
Я запутался при использовании 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 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). Он работает, сохраняя текущий часовой пояс script, меняя его на тот, который указан пользователем, получая день недели от функции date()
в указанной временной отметке, а затем устанавливая часовой пояс script обратно к тому, что он должен был начаться.
У вас могут быть некоторые приключения с идентификаторами часового пояса.
"День недели" - это то, что вы можете получить непосредственно из функции php date() с форматом "l" или "N" соответственно. Посмотри на руководство
edit: Извините, я не читал должностей Kalium правильно, он уже объяснил это. Мой плохой.
Дата проверки - понедельник или воскресенье, прежде чем вы получите последний понедельник или последнее воскресенье
public function getWeek($date){
$date_stamp = strtotime(date('Y-m-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('Y-m-d', strtotime('Last Monday', $date_stamp));
}
//end week
if($stamp == 'Sunday'){
$week_end = $date;
}else{
$week_end = date('Y-m-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('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);
}
echo date('l', strtotime('today'));