Войти
Android, Windows, Apple, Ликбез. Социальные сети. Драйверы
  • Японские телефоны Новый японский смартфон
  • Lenovo G500S: характеристики, основные особенности
  • Определяем серию продукта видеокарт Nvidia Характеристики карты nvidia 9800 gt
  • А конкуренты у смартфона есть
  • Что такое расширение файла TRZ?
  • Не работает динамик в "айфоне"
  • Php системное время. Используем функцию date() в PHP

    Php системное время. Используем функцию date() в PHP

    Среди разнообразных задач программирования, различные манипуляции со значениями даты и времени встречаются достаточно часто. Редкая автоматизированная система, база данных может обойтись без сохранения информации о времени того или иного процесса. Помимо простейшего добавления даты в запись базы данных или отображения этой даты, встречаются множество задач вывода этих дат в различном виде, проверки соответствия текущего времени с заданным таймером, вычисление срока между двумя датами и многое другое.

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

    В PHP работа с датой чаще всего сталкивается с UNIX TIMESTAMP. Здесь время хранится целым числом. Исчисление времени начинается с 1 января 1970 года. Поэтому, например, дата и время 11.12.2014 19:40:00, будет представлено числом 1418316000. Эта цифра показывает, сколько секунд прошло с нулевой даты 1 января 1970 года, названой Эпохой Unix.

    Пример php-страницы, предоставляющий возможности преобразования данных представлен на сайте в разделе программ программой "Преобразование формата даты и времени" . Здесь можно сформировать нужную дату в формат UNIX TIMESTAMP, а так же привести этот формат в стандартный, понятный человеку вид.

    Получение текущего времени и даты в PHP

    Для получения текущего времени сервера используется функция

    int time(void)

    которая как раз вернет значение в формате unix timestamp.

    echo time(); // вывод текущего времени в формате unix timestamp

    На первый взгляд не очень удобный формат для человека, но, как известно, чем проще представление данных, тем быстрее выполняется обработка этих значений компьютером. Кроме того, хранение числа в базе данных намного экономичнее, чем какой-либо специальный формат. Так же, PHP работает со временем одинаково и на Unix и на Windows платформе, что обеспечивает возможность использовать код на любой из этих платформ.

    Преобразование формата даты и времени в PHP

    Простейший механизм, позволяющий преобразовать числовое значение даты на более понятные значения, предоставляется функцией:

    array getdate()

    Она возвращает ассоциативный массив, содержащий информацию о дате. Если параметр timestamp не указан, будут возвращены сведения о текущем времени. Этот массив содержит следующие значения:

    Полученный массив, позволяет вывести значения нужном виде:

    $date = 1418372345;
    $date_mas = getdate($date);
    echo $date_mas["mday" ] . " . " . $date_mas["mon" ] . " . " . $date_mas["year" ]; // 12.12.2014


    Так же для преобразования формата даты и времени можно воспользоваться функцией:

    string date(string $template [, int $unix_timestamp])

    Она предназначена для получения текущей даты unix timestamp в нужном формате. Строковый параметр $template определяет формат вывода. Параметром $unix_timestamp можно задать, с каким значением времени производится работа. Он необязательный, поэтому, если его не указать, будет использоваться текущая дата и время.

    Формат задается следующими значениями:

    a "до" и "после" полудня: "am" или "pm"
    A "до" и "после" полудня заглавными буквами: "AM" или "PM"
    d день месяца 2 цифрами (если меньше 10, на первом месте ноль) (от 01 до 31)
    D день недели 3 буквами. Например, "Mon" (понедельник)
    j день месяца, 1-2 цифры без начальных нулей (от 1 до 31)
    F название месяца. Например, "January"
    h час, 12-часовой формат (от 01 до 12)
    H час, 24-часовой формат (от 00 до 23)
    g час, 12-часовой формат без нулей (от 1 до 12)
    G час, 24-часовой формат без нулей (от 0 до 23)
    i минуты (от 00 до 59)
    I (заглавная i) 1, если действует переход на летнее время, иначе 0
    L 1, если год високосный, или 0 если не високосный
    B время в формате Интернет-времени (альтернативной системы отсчета времени суток) (от 000 до 999)
    T временная зона компьютера. Например, MDT
    l (строчная L) день недели. Например, "Monday"
    m месяц, две цифры с нулями (от 01 до 12)
    n месяц, одна-две цифры без нулей (от 1 до 12)
    M сокращенное наименование месяца. Например, "Jan"
    t число дней в указанном месяце (от 28 до 31)
    s секунды (от 0 до 59)
    S англоязычный порядковый суффикс числа из двух букв ("st", "nd", "rd" или "th")
    U целое число секунд, прошедших с момента начала эпохи UNIX
    y год, цифровой, 2 цифры (14)
    Y год, цифровой, 4 цифры (2014)
    z порядковое число дня в году (от 0 до 365)
    Z смешение временной зоны в секундах (от -43200 до 43200)
    N порядковый номер дня недели от 1 (понедельник) до 7 (воскресенье) в соответствии со стандартом ISO-8601, (добавлен в версии PHP 5.1.0)
    w порядковый номер дня недели от 0 (воскресенье) до 6 (суббота)
    W порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0)
    o номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0)
    e код шкалы временной зоны. Например: UTC, GMT, Atlantic/Azores (добавлен в версии PHP 5.1.0)
    O разница с временем по Гринвичу, в часах. Например: +0200
    P разница с временем по Гринвичу с двоеточием между часами и минутами. Например: +02:00 (добавлено в версии PHP 5.1.3)
    c дата в формате стандарта ISO 8601. Например, 2014-12-12T15:19:21+00:00 (добавлено в PHP 5)
    r дата в формате » RFC 2822. Например: Thu, 21 Dec 2000 16:01:07 +0200
    U количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT)

    Как видно из списка, с помощью этой функции можно получить очень много полезных данных о дате. Например:

    $date = 1418372345; // исходное дата и время 12.12.2014 11:19:05

    echo date("d.m.Y" , $date); // 12.12.2014 (дата)
    echo date("H:i:s" , $date); // 11:19:05 (время)
    echo date("H:i" , $date); // 11:19 (время)
    echo date("t" , $date); // 31 (число дней в месяце)
    echo date("z" , $date); // 345 (порядковый номер дня в году)
    echo date("l dS \of F Y h:i:s A" , $date); // Friday 12th of December 2014 11:19:05 AM

    Другие символы, входящие в шаблон, будут выведены в строке как есть. Если же потребуется ввести символ, который используется в функции как код формата, перед ними вставляется символ "\". Для значения "\n" (символ перехода на новую строку), следует указать "\\n". Таким образом, можно делать вывод целого сообщения, содержащего сведения о дате и времени:

    echo date("Сегодня z-й день Y-го года" , $date); // Сегодня 345-й день 2014-го года

    Преобразование даты и времени в формат timestamp

    Для обратного преобразования даты из стандартного формата в числовое значение timestamp применяется функция:

    int mktime(]]]]]])

    Функция mktime() возвращает значение времени Unix, соответствующую дате и времени, заданным аргументами. Например:

    $my_date = mktime (10, 30, 0, 12, 12, 2014);

    Следует внимательно относится к порядку аргументов функции: часы, минуты, секунды, месяц, день, год.

    Кроме простого формирования значения даты в timestamp, функцию mktime() можно использовать для арифметически вычисления с датами. Для этого просто можно ввести необходимые аргументы. Например, если указать 14 месяц, то в итоговом значении, месяц будет 2-й, а значение года увеличится на единицу:

    $my_day = 12;
    $my_month = 12;
    $my_year = 2014;

    $new_date = mktime(0, 0, 0, $my_month + 5, $my_day, $my_year);

    echo date("d.m.Y" , $new_date); // 12.05.2015 (дата)

    Аналогично можно поступать и с другими параметрами.

    Проверка корректности даты в PHP

    При работе с датами, особенно при формировании даты предложенной выше функцией mktime() необходимо учитывать корректность вводимой даты. Для этого в PHP используется функция:

    bool checkdate(int month, int day, int year)

    Возвращает true если дата, заданная аргументами, является правильной; иначе возвращает false. Дата считается правильной, если:

    Год в диапазоне от 1 до 32767;

    Месяц в диапазоне от 1 до 12;

    День для заданного месяца с учетом високосного года указаны правильно.

    Пример проверки даты:

    $my_day = 32;
    $my_month = 12;
    $my_year = 2014;

    if (!checkdate($my_month, $my_day, $my_year))
    echo "Ошибка: дата указана некорректно" ;

    string date (string format [, int timestamp ])

    Возвращает время, отформатированное в соответствии с аргументом format , используя метку времени, заданную аргументом timestamp или текущее системное время, если timestamp не задан. Другими словами, timestamp является необязательным и по умолчанию равен значению, возвращаемому функцией time() .

    Замечание: Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038.

    Замечание: Для получения метки времени из строкового представления даты можно использовать функцию strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (напрмер, функция MySQL UNIX_TIMESTAMP).

    В параметре format распознаются следующие символы

    Символ в строке format Описание Пример возвращаемого значения
    a Ante meridiem или Post meridiem в нижнем регистре am или pm
    A Ante meridiem или Post meridiem в верхнем регистре AM или PM
    B Время в стадарте Swatch Internet От 000 до 999
    c Дата в формате ISO 8601 (добавлено в PHP 5) 2004-02-12T15:19:21+00:00
    d День месяца, 2 цифры с ведущими нулями от 01 до 31
    D Сокращенное наименование дня недели, 3 символа от Mon до Sun
    F Полное наименование месяца, например January или March от January до December
    g Часы в 12-часовом формате без ведущих нулей От 1 до 12
    G Часы в 24-часовом формате без ведущих нулей От 0 до 23
    h Часы в 12-часовом формате с ведущими нулями От 01 до 12
    H Часы в 24-часовом формате с ведущими нулями От 00 до 23
    i Минуты с ведущими нулями 00 to 59
    I (заглавная i) Признак летнего времени 1 , если дата соответствует летнему времени, иначе 0 otherwise.
    j День месяца без ведущих нулей От 1 до 31
    l (строчная "L") Полное наименование дня недели От Sunday до Saturday
    L Признак високосного года 1 , если год високосный, иначе 0 .
    m Порядковый номер месяца с ведущими нулями От 01 до 12
    M Сокращенное наименование месяца, 3 символа От Jan до Dec
    n Порядковый номер месяца без ведущих нулей От 1 до 12
    O Разница с временем по Гринвичу в часах Например: +0200
    r Дата в формате RFC 2822 Например: Thu, 21 Dec 2000 16:01:07 +0200
    s Секунды с ведущими нулями От 00 до 59
    S Английский суффикс порядкового числительного дня месяца, 2 символа st , nd , rd или th . Применяется совместно с j
    t Количество дней в месяце От 28 до 31
    T Временная зона на сервере Примеры: EST , MDT ...
    U Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT) См. также time()
    w Порядковый номер дня недели От 0 (воскресенье) до 6 (суббота)
    W Порядковый номер недели года по ISO-8601, первый день недели - понедельник (добавлено в PHP 4.1.0) Например: 42 (42-я неделя года)
    Y Порядковый номер года, 4 цифры Примеры: 1999 , 2003
    y Номер года, 2 цифры Примеры: 99 , 03
    z Порядковый номер дня в году (нумерация с 0) От 0 до 365
    Z Смещение временной зоны в секундах. Для временных зон западнее UTC это отрицательное число, восточнее UTC - положительное. От -43200 до 43200

    Любые другие символы, встреченные в строке format , будут выведены в результирующую строку без изменений. Z всегда возвращает 0 при использовании gmdate() .

    Примеры использования функции date()

    Избежать распознавания символа как форматирующего можно, если экранировать этот символ с помощью \ Если в сочетании с \ символ являееся специальным (например, \t), следует добавлять еще один \.

    Экранирование символов в функции date()

    PHP расширение для работы с датой и временем, это набор классов, которые позволяют решать множество задач. Данные функции доступны начиная с 5.2 версии, были представлены несколько классов, каждый из которых отображал сценарий реального времени:

    Дата и время представлялись с помощью DateTime объекта.

    Часовой пояс представлялся с помощью DateTimeZone.

    DateInterval объекты представляют интервал времени. Например, когда нам необходимо отсчитать 2 дня или часа от текущего времени. Этот объект не основывается на конкретном времени, это просто интервал.

    DatePeriod представляет период между двумя датами.

    Теперь мы рассмотрим реальное применение вышесказанного.

    Date() и DateTime

    Если нам нужно получить дату, мы используем date() , это просто и работает. Всего лишь передать желаемый формат даты. Только это не совсем удобно на практике, например, когда необходимо изменять время в зависимости от временной зоны.

    DateTime делает больше, нежели просто возвращает дату. Перед тем как это использовать необходимо инициировать новый DateTime объект. Делается это как и в любом другом PHP классе:

    $date = new DateTime();

    Конструктор DateTime принимает строку как параметр, на данный момент строка пустая, установлена текущая дата и время по умолчанию.

    Для создания определенной даты, необходимо передать условие для конструктора. Ниже можете увидеть некоторые из них, которые весьма понятны:

    New DateTime("2013, March 24") //DateTime отобразит 24 марта 2013 new DateTime("2013-03-24") //DateTime отобразит 24 марта 2013 new DateTime("+2 days") // 2 день начиная от сегодняшнего new DateTime("tomorrow") // завтрашний день

    Полный список доступных форматов можно найти в официальной документации .

    Если не найдете подходящий формат времени, вы можете определить его сами с помощью DateTime::createFromFormat .

    Теперь, когда мы держим в руках готовый DateTime объект, мы можем делать много интересных вещей.

    Временной штамп Unix

    $date->getTimestamp();

    Изменение Даты и Времени

    $date->setDate(2013, 12, 30); //гггг, мм, дд установит определенную дату $date->setTime(12, 3, 20); //чч, мм, сс (опционально) установит время $date->modify("tomorrow"); // завтра можно задать даже так! $date->setTimestamp(1364798550); // установка даты и времени используя unix штамп

    Стоит заметить, если передаем параметры выше допустимых, PHP автоматически изменит их в соответствии. Например, $date->setDate(2013, 12, 35); возвратит 2014-01-04, то же самое и для время.

    Работа с несколькими датами

    Теперь, когда вы осведомлены с DateTime, ваши приложения будут сложены проще и грамотнее. Надеемся теперь вы любите даты более чем когда либо.

    Сейчас мы рассмотрим работу с некоторыми математическими вычислениями. Скажем, нам необходимо сравнить две даты рождения:

    $sheldon = new DateTime("May 20th, 1980"); $neo = new DateTime("March 11th, 1962"); if ($sheldon > $neo) echo "Sheldon моложе нежели neo";

    Это можно сделать с помощью другого сценария. Вот так:

    $diff = $neo->diff($sheldon);

    Вызов функции diff возвращает DateInterval объект. Вот как он выглядит:

    DateInterval Object ([y] => 18 [m] => 2 [d] => 9 [h] => 0 [i] => 0 [s] => 0 => 0 => 6645)

    Это public свойства. Вы можете генерировать интересные штуки на основании этого объекта.

    //Neo старше на 18 лет и 2 месяца $diff->format("Neo старше на %Y лет и %m месяцев");

    Самое полезное, то что можно применить DateInterval объект к другому аналогичному DateInterval объекту.

    $neo->add($diff); //день рождения neo изменен на sheldon

    Заметьте: Модификация DateTime, например как в случае высше, не возвращает новый объект, просто видоизменяет прежний. Держите это во внимании когда работаете со своим приложением. PHP 5.5 представил новый класс, который возвращает новый объект после модификации.

    Diff это не единственный способ получить объект интервала. Так как это класс, новый объект может быть создан как обычно:

    $new_diff = new DateInterval("P2Y");

    Передается в конструктор количество лет, месяцев, дней и т.д. Более информации можно найти в документации о конструкторе .

    Работа с часовыми поясами

    Когда создаем новый DateTime объект, второй аргумент определяет часовой пояс. Если мы упустим этот аргумент, временная зона будет взята с php.ini date.timezone. Вы можете изменять это на лету с помощью вызова date_default_timezone_set :

    Date_default_timezone_set("America/New_York"); new DateTime("today"); //datetime объект изменен на часовой пояс Нью Йорка

    Вы также можете изменять часовой пояс с помощью объекта DateTimeZone:

    $timezone = new DateTimeZone("America/New_York"); $sheldon->setTimezone($timezone); //день рождения Шэлдона по времени в New York

    Можно определять временную зону в процессе создания DateTime объекта:

    $sheldon = new DateTime("May 20th, 1980", $timezone);

    Важно помнить, что setTimezone изменяет оригинальный объект DateTime. Мы запрашиваем изменить данную дату в соответствии с временной зоной. С другой стороны, в последнем примере, мы передали временную зону в конструктор, говоря: «Дата которую я создаю, находится в этой временной зоне».

    Список доступных часовых поясов доступен в документации .

    Периоды даты и времени

    Думаю, официальная документация предоставляет наиболее понятные объяснения:

    Позволяет перемещаться в заданном временном интервале на равные промежутки времени.

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

    Предположим, что мы хотим получить все дни рождения Шэлдона, начиная с его рождения:

    //так как дни рождения раз в год, интервал будет один год $interval = new DateInterval("P1Y"); //третий аргумент конечная дата, new DateTime() == сейчас $period = new DatePeriod($sheldon, $interval, new DateTime()); foreach($period as $dt) { //DateTime объект echo $dt->format("Y-m-d - D"), "\n"; }

    Результат будет следующим:

    1981-05-20 - Wed 1982-05-20 - Thu 1983-05-20 - Fri 1984-05-20 - Sun 1985-05-20 - Mon 1986-05-20 - Tue ...

    Сейчас периоды вмещают стартовую дату также. Можно исключить ее, передав четвертый аргумент в конструктор:

    $period = new DatePeriod($sheldon, $interval, new DateTime(), DatePeriod::EXCLUDE_START_DATE);

    Давайте посмотрим, сколько раз Neo праздновал день рождение еще до рождения Шэлдона:

    $bdays = new DatePeriod($neo, $interval, $sheldon, DatePeriod::EXCLUDE_START_DATE); echo iterator_count($bdays);

    Расширение

    Все классы, которые мы рассмотрели сегодня, могут быть расширены с помощью собственных методов. Самый распространенный способ создавать функцию __toString , которая позволит отображать DateTime объект без вызова format.

    Что еще?

    Как видите, это расширение даты и времени предлагает большие возможности. В последних версиях PHP есть новые классы, достаточно взглянуть в документацию.

    У вас есть хорошие примеры использования даты и времени в PHP? Поделитесь ими в комментариях ниже! Всем спасибо за чтение.


    Date(format, timestamp)

    Функция date возвращает строку, отформатированную в соответствии с заданной строкой формата, используя данную целочисленную временную метку или текущее время, если временная метка не указана. Другими словами, timestamp является необязательной и по умолчанию имеет значение time().

    И параметры -

    Формат - Обязательно. Определяет формат отметки времени

    timestamp - (Необязательно) Указывает временную метку. По умолчанию текущая дата и время

    Как получить простое свидание

    Обязательный параметр формата функции date() указывает, как форматировать date (or time) .

    Вот некоторые символы, которые обычно используются для дат:

    1. d - представляет день месяца (с 01 по 31)
    2. m - представляет месяц (от 01 до 12)
    3. Y - представляет год (из четырех цифр)
    4. l (нижний регистр "L") - представляет день недели

    Другие символы, такие как "/", ".", or "-" также могут быть вставлены между символами для добавления дополнительного форматирования.

    Пример ниже форматирует сегодняшнюю дату тремя различными способами:

    "; echo "Today is " . date("Y.m.d") . "
    "; echo "Today is " . date("Y-m-d") . "
    "; echo "Today is " . date("l"); ?>

    Несколько полезных ссылок

    • gmdate() - форматирует дату/время по Гринвичу /UTC
    • idate() - форматирует местное время/дату как целое число
    • getdate() - получает информацию о дате/времени
    • getlastmod() - Получает время последней модификации страницы
    • mktime() - получает метку времени Unix для даты
    • strftime() - форматирует местное время/дату в соответствии с настройками локали

    Для вывода времени или даты в пользовательском формате существует функция date.

    В этом примере на экран выводится текущяя дата в формате день/месяц/год в виде чисел. Прочитав эту статью до конца вы сможете выводить на экран текущую дату и время в любом формате.
    Данная функция позволяет выводить не только текущую дату и время, но и преобразовывать метку времени в заданный формат. Метка времени - это число секунд, прошедших с момента основания linux. Это число можно получить, используя функцию time(). Метка времени в функции date является необязательным параметром. Что бы получить формат, который вам нужен, вы можете использовать специальные модификаторы в первом параметре. Их достаточно много.

    Символ в строке format Описание Пример возвращаемого значения
    a am или pm в нижнем регистре am, pm
    A AM или PM в верхнем регистре AM, PM
    B Время в стадарте Swatch Internet От 000 до 999
    c Дата в формате ISO 8601 (добавлено в PHP 5) 2005-06-11T11:11:11+00:00
    d День месяца, 2 цифры с ведущими нулями от 01 до 31
    D Сокращенное наименование дня недели, 3 символа от Mon до Sun
    F Полное наименование месяца от January до December
    g Часы в 12-часовом формате без ведущих нулей От 1 до 12
    G Часы в 24-часовом формате без ведущих нулей От 0 до 23
    h Часы в 12-часовом формате с ведущими нулями От 01 до 12
    H Часы в 24-часовом формате с ведущими нулями От 00 до 23
    i Минуты с ведущими нулями 00 to 59
    I (заглавная i) Признак летнего времени 1, если дата соответствует летнему времени, иначе 0 otherwise.
    j День месяца без ведущих нулей От 1 до 31
    l (строчная "L") Полное наименование дня недели От Sunday до Saturday
    L Признак високосного года 1, если год високосный, иначе 0.
    m Порядковый номер месяца с ведущими нулями От 01 до 12
    M Сокращенное наименование месяца, 3 символа От Jan до Dec
    n Порядковый номер месяца без ведущих нулей От 1 до 12
    O Разница с временем по Гринвичу в часах +0200
    r Дата в формате RFC 2822 Thu, 28 Jan 2011 15:11:14 +0200
    s Секунды с ведущими нулями От 00 до 59
    S Английский суффикс порядкового числительного дня месяца, 2 символа st, nd, rd или th. Применяется совместно с j
    t Количество дней в месяце От 28 до 31
    T Временная зона на сервере Примеры: EST, MDT ...
    U Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT) 1356361196
    w Порядковый номер дня недели От 0 (воскресенье) до 6 (суббота)
    W Порядковый номер недели года по ISO-8601, первый день недели - понедельник (добавлено в PHP 4.1.0) Например: 42 (42-я неделя года)
    Y Порядковый номер года, 4 цифры Примеры: 1986, 2012
    y Номер года, 2 цифры Примеры: 86, 12
    z Порядковый номер дня в году (нумерация с 0) От 0 до 365
    Z Смещение временной зоны в секундах. Для временных зон западнее UTC это отрицательное число, восточнее UTC - положительное. От -43200 до 43200

     Если этот сайт оказался вам полезен, вы можете помочь в его развитии, поставив