php date неправильное время
функция date выдает неправильное время
gaskar
Новичок
функция date выдает неправильное время
Новичок
jonjonson
Охренеть
tony2001
TeaM PHPClub
gaskar
Новичок
jonjonson Да на операционке часы показывают 01:20. А операционка windows xp sp2
tony2001 date.timezone я поставил на нашу зону.
tony2001
TeaM PHPClub
итак, что нам известно на данный момент:
1. часы показывают 01:20
2. при вызове функции date(‘G’) результат 20
3. время отстает на пять часов. (что уже противоречит первым 2-м)
чего мы НЕ знаем:
1. какая версия PHP
2. какая ОС
3. какая таймзона выставлена в php.ini
4. какая таймзона показывается в phpinfo()
5. какая таймзона _на самом деле_ ожидается
спрашивается:
что вы ожидаете, когда задаете вопросы таким образом?
волшебника в голубом вертолёте?
gaskar
Новичок
Автор оригинала: tony2001
итак, что нам известно на данный момент:
1. часы показывают 01:20
2. при вызове функции date(‘G’) результат 20
3. время отстает на пять часов. (что уже противоречит первым 2-м)
чего мы НЕ знаем:
1. какая версия PHP
2. какая ОС
3. какая таймзона выставлена в php.ini
4. какая таймзона показывается в phpinfo()
5. какая таймзона _на самом деле_ ожидается
спрашивается:
что вы ожидаете, когда задаете вопросы таким образом?
волшебника в голубом вертолёте?
PHP неправильная дата/время
PHP date() & time() неверное время возврата:
Я проверил большинство вопросов, касающихся похожих проблем на SO / Google, но все они, похоже, имеют неправильный часовой пояс.
любые идеи будут с благодарностью.
6 ответов
проблема похожа на то, что я видел на одном из моих серверов. Похоже на ошибка в php 5.3.2-1. Попробуйте запустить PHP-скрипт в отчете об ошибке и опубликовать результаты.
чтение руководства PHP кажется, что поведение дата.часовой пояс зависит от настроек в php.ini. Существует еще один способ установить часовой пояс по умолчанию во всех функциях даты/времени, и это для меня. Попробуйте установить его с помощью:
вместо дата.часовой пояс код.
часовой пояс системы может быть неправильным. Это приводит к сдвигу во времени, заданном функцией PHP date (), хотя обе даты php.часовой пояс (в PHP.ini) и системное время сервера правильные.
У меня тоже были проблемы с часовыми поясами. Это может кому-то пригодиться.
в моем случае Chile Sumer Time CLST вернул неправильное смещение timzeone.
обновление timezonedb работал для меня.
Для Widnows загрузите самую новую версию dll, скопируйте в каталог «ext». Отредактируйте php.ini и положить ниже строка:
Для Linux вы можете использовать :
pecl установить timezonedb
и в php.ini поставил:
вы должны установить дату.часовой пояс в PHP.ini и перезапустить сервер http://php.net/manual/en/timezones.php
время PHP основано на шкале времени эпохи, которая использует GMT и более поздний UTC. Большинство людей теперь называют это время unix. Поскольку PHP использует время unix, часовые пояса не используются. Я считаю, что вычитание часов часового пояса в секундах является правильным методом для корректировки различий.
Php date неправильное время
(PHP 4, PHP 5, PHP 7, PHP 8)
date — Форматирует вывод системной даты/времени
Описание
Список параметров
Возвращаемые значения
Ошибки
Список изменений
Версия | Описание |
---|---|
8.0.0 | timestamp теперь допускает значение null. |
Примеры
Пример #1 Примеры использования функции date()
// установка часового пояса по умолчанию.
date_default_timezone_set ( ‘UTC’ );
// выведет примерно следующее: Monday
echo date ( «l» );
// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date ( ‘l jS \of F Y h:i:s A’ );
/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Mon, 15 Aug 2005 15:12:46 UTC
echo date ( DATE_RFC822 );
Чтобы запретить распознавание символа как форматирующего, следует экранировать его с помощью обратного слеша. Если экранированный символ также является форматирующей последовательностью, то следует экранировать его повторно.
Пример #2 Экранирование символов в функции date()
Пример #3 Пример совместного использования функций date() и mktime()
Данный способ более надёжен, чем простое вычитание и прибавление секунд к метке времени, поскольку позволяет при необходимости гибко осуществить переход на летнее/зимнее время.
Пример #4 Форматирование с использованием date()
// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся в часовом поясе Mountain Standard Time (MST)
$today = date ( «F j, Y, g:i a» ); // March 10, 2001, 5:16 pm
$today = date ( «m.d.y» ); // 03.10.01
$today = date ( «j, n, Y» ); // 10, 3, 2001
$today = date ( «Ymd» ); // 20010310
$today = date ( ‘h-i-s, j-m-y, it is w Day’ ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date ( ‘\i\t \i\s \t\h\e jS \d\a\y.’ ); // it is the 10th day.
$today = date ( «D M j G:i:s T Y» ); // Sat Mar 10 17:16:18 MST 2001
$today = date ( ‘H:m:s \m \i\s\ \m\o\n\t\h’ ); // 17:03:18 m is month
$today = date ( «H:i:s» ); // 17:16:18
$today = date ( «Y-m-d H:i:s» ); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>
Примечания
Смотрите также
User Contributed Notes 20 notes
Things to be aware of when using week numbers with years.
Conclusion:
if using ‘W’ for the week number use ‘o’ for the year.
In order to define leap year you must considre not only that year can be divide by 4!
The correct alghoritm is:
if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)
So the code should look like this:
For Microseconds, we can get by following:
echo date(‘Ymd His’.substr((string)microtime(), 1, 8).’ e’);
FYI: there’s a list of constants with predefined formats on the DateTime object, for example instead of outputting ISO 8601 dates with:
echo date ( ‘Y-m-d\TH:i:sO’ );
?>
You can use
echo date ( DateTime :: ISO8601 );
?>
instead, which is much easier to read.
this how you make an HTML5 tag correctly
It’s common for us to overthink the complexity of date/time calculations and underthink the power and flexibility of PHP’s built-in functions. Consider http://php.net/manual/en/function.date.php#108613
date() will format a time-zone agnostic timestamp according to the default timezone set with date_default_timezone_set(. ). Local time. If you want to output as UTC time use:
$tz = date_default_timezone_get ();
date_default_timezone_set ( ‘UTC’ );
For HTML5 datetime-local HTML input controls (http://www.w3.org/TR/html-markup/input.datetime-local.html) use format example: 1996-12-19T16:39:57
To generate this, escape the ‘T’, as shown below:
If timestamp is a string, date converts it to an integer in a possibly unexpected way:
The example below formats today’s date in three different ways:
The following function will return the date (on the Gregorian calendar) for Orthodox Easter (Pascha). Note that incorrect results will be returned for years less than 1601 or greater than 2399. This is because the Julian calendar (from which the Easter date is calculated) deviates from the Gregorian by one day for each century-year that is NOT a leap-year, i.e. the century is divisible by 4 but not by 10. (In the old Julian reckoning, EVERY 4th year was a leap-year.)
This algorithm was first proposed by the mathematician/physicist Gauss. Its complexity derives from the fact that the calculation is based on a combination of solar and lunar calendars.
At least in PHP 5.5.38 date(‘j.n.Y’, 2222222222) gives a result of 2.6.2040.
So date is not longer limited to the minimum and maximum values for a 32-bit signed integer as timestamp.
Prior to PHP 5.6.23, Relative Formats for the start of the week aligned with PHP’s (0=Sunday,6=Saturday). Since 5.6.23, Relative Formats for the start of the week align with ISO-8601 (1=Monday,7=Sunday). (http://php.net/manual/en/datetime.formats.relative.php)
This can produce different, and seemingly incorrect, results depending on your PHP version and your choice of ‘w’ or ‘N’ for the Numeric representation of the day of the week:
Prior to PHP 5.6.23, this results in:
Today is Sun 2 Oct 2016, day 0 of this week. Day 1 of next week is 10 Oct 2016
Today is Sun 2 Oct 2016, day 7 of this week. Day 1 of next week is 10 Oct 2016
Since PHP 5.6.23, this results in:
Today is Sun 2 Oct 2016, day 0 of this week. Day 1 of next week is 03 Oct 2016
Today is Sun 2 Oct 2016, day 7 of this week. Day 1 of next week is 03 Oct 2016
I’ve tested it pretty strenuously but date arithmetic is complicated and there’s always the possibility I missed something, so please feel free to check my math.
The function could certainly be made much more powerful, to allow you to set different days to be ignored (e.g. «skip all Fridays and Saturdays but include Sundays») or to set up dates that should always be skipped (e.g. «skip July 4th in any year, skip the first Monday in September in any year»). But that’s a project for another time.
$start = strtotime ( «1 January 2010» );
$end = strtotime ( «13 December 2010» );
// Add as many holidays as desired.
$holidays = array();
$holidays [] = «4 July 2010» ; // Falls on a Sunday; doesn’t affect count
$holidays [] = «6 September 2010» ; // Falls on a Monday; reduces count by one
?>
Or, if you just want to know how many work days there are in any given year, here’s a quick function for that one:
Php date неправильное время
Сегодня утром заметил, что время на сервере, где располагается наш сайт, перевелось на час назад (видать не отключили автоматический перевод часов). Из-за данного смещения времени на нашем сайте многие даты тоже поплыли (даты оценок тем и комментариев, последней активности пользователей и т.д.).
Что самое удивительно, так это то, что на час сдвинулось даже время создания файлов.
А что самое интересное, так это то, что форум это не затронуло и часы на форуме идут правильно.
Проверял локацию и время таким образом:
Выдало, что локация стоит Москва, но время не верное (на час меньше).
Пришлось применять меры и исправлять время путем смены локации:
Написал в техподдержку нашего хостера с вопросом будут ли они переводить время и правильна ли была с нашей стороны смена локации.
Посмотрим, что они ответят.
Цитата: Мы обновили информацию о часовых поясах.
Пожалуйста, проверьте.
Вот только ровным счетом ничего не изменилось.
Для проверки создал файл под именем 2.php в который добавил следующий код:
Следующий ответ не заставил себя так долго ждать как первый:
Цитата: Спасибо за подробное описание проблемы.
Передано администраторам. В течении нескольких дней мы постараемся решить её.
Реальное состояние, как мы видим, отличается от того, что есть в пакете tzdata операционной системы.
Да, действительно, сдвиг временной зоны date_default_timezone_set на данный момент лучшее решение, опять же, пока мы не найдём системное решение.
На данный момент времени проблема на стороне хостера устранена и в локации Europe/Moscow время совпадает с реальным.
Единственный недочет на данный момент это отставание времени в ftp клиенте, но это уже мелочи.
Работа с датой и временем в PHP
Запустив данный скрипт, Вы узнаете, сколько секунд прошло с полуночи 01.01.1970 до момента вызова функции time() в Вашем скрипте.
Разумеется, помимо этой базовой функции, которая присутствует во всех языках программирования, где можно работать с датой и временем (по крайней мере, среди тех, которые я знаю), существует и другая функция, которая называется getdate():
Запустив данный скрипт, Вы увидите набор ключей в массиве и их соответствующих значений (заодно, повторили конструкцию foreach). Думаю, что теперь для Вас не составит труда узнать любые данные, связанные с датой и временем. Например, чтобы вывести текущее время, необходимо написать следующий код:
Также у функции getdate() существует необязательный параметр, который означает количество секунд, прошедших с полуночи 01.01.1970. Он сделан для того, чтобы эта функция могла возвращать не только текущие время и дату, а, вообще говоря, любые:
В результате, Вы увидите 1974-ый год.
Также существует функция date(). Я рекомендую посмотреть описание по ней в справочнике, так как данная функция принимает весьма сложный параметр, который задаёт формат вывода даты. Элементов форматирования чуть больше 30-ти штук. И в примере ниже я приведу несколько из них, а остальные посмотрите в справочнике, потому что их запоминать не нужно, но ознакомиться с ними крайне желательно. А принцип их использования знать обязательно, и о нём следующий пример:
В результате, Вы увидите что-то наподобие этого: «Сегодня 15.11.2010 21:44:24«. Также у функции date() есть ещё второй необязательный параметр, задающий timestamp, как раз та величина, равная количеству секунд, прошедших с полуночи 01.01.1970. Пример использования второго параметра:
Также существует функция gmdate(), которая является полным аналогом функции date(), но функция gmdate() показывает время не по часовому поясу сервера, на котором работает скрипт, а по Гринвичу. Очевидно, что с помощью этой функции надо сохранять всю информацию о дате и времени, которую видит пользователь, а при выводе нужно подстраиваться под часовой пояс каждого пользователя (в идеале, конечно):
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 7 ):
Да, Михаил, меня тоже очень интересует этот вопрос! Хотелось бы статью! Спасибо!
Хорошо, через 1-2 недели будет такая статья.
Спасибо большое, жду с нетерпением!
А можно адрес этой статьи (если она уже есть)?
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.