назад к разделу "PHP программирование"

Работа с датой и временем

раздел: PHP программирование
последнее изменение: 2014-12-21
автор: Юрий Матвеев
php дата +и время

«Время — это капитал работника умственного труда»

Оноре Бальзак

При построениии любого сайта так или иначе приходится использовать временной отсчет, а значит - правильно выводить, создавать, записывать метки даты и времени. А без их корректного отображения, сайт будет содержать "ложку дегтя", которая может испортить "бочку меда".

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

  1. Нужно понимать, что сайт будет находиться на некотором хостинге, и отсчет времени по-умолчанию будет вестись от локали хостинга (локаль (англ. locale) — это набор параметров, включая набор символов, язык пользователя, страну, часовой пояс, а также другие предустановки). Функционалу сайта же в большинстве случаев необходимы привязки даты и времени к какому-то определенному часовому поясу. Установка нужного часового пояса обычно производится в конфигурационном файле (до выполнения запросов к базе данных и вывода времени) php командой:
    date_default_timezone_set("Europe/Moscow");
    В некоторых случаях может потребоваться "сдвинуть" время перед его использованием на некоторое количество часов. Сделать это можно командой:
    $time = time() + (0*60*60);
    $my_time = date("Y-m-d H:i:s", $time);
    php функция time() — возвращает текущую метку времени в формате Unix (количество секунд, прошедших с 1 января 1970 00:00:00 GMT до текущего времени)
    Вторая строка преобразовывает это количество миллисекунд в понятный нам формат Y-m-d H:i:s.
  2. Функционалу сайта мотут потребоваться разные формы хранения меток времени в базе данных. Это могут быть просто строка varchar, целое число int, форматы даты и времени DATE и TIME.
    Наиболее универсальный - DATETIME (хранит строку формата Y-m-d H:i:s, имеется множество функций работы с данным форматом, позволяющие преобразовать его в любой другой вид).
    Также в моих проектах очень востребован производный от него формат TIMESTAMP. Преимущество его в том, что при каких-либо изменениях в строке таблицы базы данных ячейка данного формата автоматически обновит метку времени и не нужно дополнительно прописывать mysql функцию. Ячейка данного типа содержится практически во всех моих mysql таблицах.
    Вывод в нужном виде из ячеек базы данных типа DATETIME и TIMESTAMP легко можно сделать следующим образом:
    $date = new DateTime($myrow["date"]);
    echo $date->format("H:i");
    В данном случае выводится временная метка в формата ЧЧ:ММ.
    Форматирование времени можно применить и при mysql запросе:
    $result = mysql_query ("SELECT *,DATE_FORMAT(date, ’%k:%i’) as date FROM locations ORDER BY date ",$link);
    В формировании выходного шаблона команды format могут использоваться следующие символы:
    символ описание пример
    Год
    Y 4 цифры 2015
    y 2 последние цифры 15
    Месяц
    m Порядковый номер месяца (с нулём) 01 - 12
    n Порядковый номер месяца (без нуля) 1 - 12
    F Полное наименование месяца January - December
    M Сокращенное наименование месяца (3 символа) Jan - Dec
    t Количество дней в месяце 28 - 31
    Неделя
    W Порядковый номер недели года 32
    День
    d День месяца (с нулём) 01 - 31
    j День месяца (без нуля) 1 - 31
    l (строчная L) Полное наименование дня недели Sunday - Saturday
    D Сокращённое наименование дня недели (3 символа) Mon - Sun
    N Порядковый номер дня недели (стандарт ISO-8601) 1 (понедельник) - 7 (воскресенье)
    w Порядковый номер дня недели (от 0 до 6) 0 (воскресенье) - 6 (суббота)
    z Порядковый номер дня в году (начиная с 0) 0 - 365
    Часы
    g Часы в 12-часовом формате (без нуля) 1 - 12
    G Часы в 24-часовом формате (без нуля) 0 - 23
    h Часы в 12-часовом формате (с нулём) 01 - 12
    H Часы в 24-часовом формате (с нулём) 00 - 23
     a До или после полудня в нижнем регистре am или pm
    A До или после полудня в верхнем регистре AM или PM
    Минуты
    i (строчная I)
    Минуты (с нулём) 00 - 59
    Секунды
     s  Секунды (с нулём) 00 - 59
    Временная зона
    P Разница с временем по Гринвичу (с двоеточием между часами и минутами) +03:00
    O Разница с временем по Гринвичу +0300
    e Код шкалы временной зоны UTC, GMT, Atlantic/Azores
    Z Смещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC - положительные. -43200 - 50400
    Полные дата/время
    c Дата в формате стандарта ISO 8601 2014-12-21T22:19:21+03:00
    r Дата в формате RFC 2822 Thu, 21 Dec 2014 16:01:07 +0300
    U время UNIX (количество миллисекунд с 1 января 1970 00:00:00 GMT)  

Вы можете оставить комментарий или отзыв об этой статье
  • X
    31
    Ваше имя:
    Комментарий:
    loader