Начнем с того что есть некая метка времени Unix – это 32-разрядное
целое число секунд. Все договорились, что количество секунд от момента 1 января 1970 г. по Гринвичу до того момента времени в котором Вы хотите узнать эту самую метку времени.
Метки времени UNIX — компактный способ хранения даты и времени и стоит от
метить, что на него совершенно не повлияла проблема 2000-го года (Y2K), от которой «пострадали» другие сокращенные форматы хранения даты. Тем не менее, для программного обеспечения в 2038 г. подобная проблема может возникнуть. Хотя метки
времени не имеют фиксированного размера, они «привязаны» к размеру длинного
целого в С (32 бита). Наиболее вероятным решением к 2038 г. будет использование в
компиляторах более емкого типа.
Даже если РНР запускается на Windows-сервере, все равно функция date() и другие
PHP-функции используют именно такой формат хранения даты. Итак…
Как получить метку времени?
1. Функция mktime()
Чтобы преобразовать время и дату в формат метки времени UNIX, можно воспользоваться функцией mktime(), которая имеет следующий прототип:
int mktime (int hour, int minute, int second, int month,int day, int year [, int is_dst])
is_dst указывает, действует ли переход на летнее время. Его можно установить равным 1, если переход на летнее время действует, и 0 — если нет, либо -1 (значение по умолчанию), если это неизвестно. В любом случае, этот аргумент является необязательным и поэтому используется редко.
2. Функция strtotime()
strtotime() преобразует текстовое представление даты на английском языке в метку времени Unix. Функция strtotime() использует GNU формат даты, поэтому рекомендуется ознакомиться с руководством GNU Date Input Formats, где описывается синтаксис аргумента time.
Пример кода
<pre>
<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>
</pre>
3. SELECT UNIX_TIMESTAMP(`field_date`) AS `field_date` FROM `table`
Этот способ используется при получении метки времени из базы данных MySQL при условии что поле таблицы имеет тип TIMESTAMP
4. time() — Возвращает текущую метку времени
Как получить дату (как строку) из метки времени?
1. string strftime ( string format [, int timestamp] )
- Возвращает строку, отформатированную в соответствии с аргументом format, используя аргумент timestamp или текущее системное время, если этот аргумент не передан. Названия месяцев, дней недели и другие строки, зависящие от языка, соответствуют текущей локали, установленной функцией setlocale().
В форматирующей строке распознаются следующие символы:
%a – сокращенное название дня недели в текущей локали
- %A – полное название дня недели в текущей локали
- %b – сокращенное название месяца недели в текущей локали
- %B – полное название месяца недели в текущей локали
- %c – предпочтительный формат даты и времени в текущей локали
- %C – столетие (год, деленный на 100 и огругленный до целого, от 00 до 99)
- %d – день месяца в виде десятичного числа (от 01 до 31)
- %D – аналогично %m/%d/%y
- %e – день месяца в виде десятичного числа, если это одна цифра, то перед ней добавляется пробел (от ‘ 1′ до ’31′)
- %g – подобно %G, но без столетия.
- %G – Год, 4-значное число, соответствующее номеру недели по ISO (см. %V). Аналогично %Y, за исключением того, что если номер недели по ISO соответствует предыдущему или следующему году, используется соответствующий год.
- %h – аналогично %b
- %H – номер часа от 00 до 23
- %I – номер часа от 01 до 12
- %j – номер дня в году (от 001 до 366)
- %m – номер месяца (от 01 до 12)
- %M – минуты
- %n – символ «\n»
- %p – `am’ или `pm’, или соответствующие строки в текущей локали
- %r – время в формате a.m. или p.m.
- %R – время в 24-часовом формате
- %S – секунды
- %t – символ табуляции («\t»)
- %T – текущее время, аналогично %H:%M:%S
- %u – номер дня недели от 1 до 7, где 1 соответствует понедельнику
- нимание
На Sun Solaris 1 соответствует воскресенью, хотя в ISO 9889:1999 (текущий стандарт языка C) явно указано, что это должен быть понедельник.
- %U – порядковый номер недели в текущем году. Первым днем первой недели в году считается первое воскресенье года.
- %V – Порядковый номер недели в году по стандарту ISO 8601:1988 от 01 до 53, где 1 соответствует первой неделе в году, в которой как минимум 4 дня принадлежат этому году. Первым днем недели считается понедельник. (Используйте %G or %g для определения соответствующего года)
- %W – порядковый номер недели в текущем году. Первым днем первой недели в году считается первый понедельник года.
- %w – номер дня недели, 0 соответствует воскресенью
- %x – предпочтительный формат даты без времени в текущей локали
- %X – предпочтительный формат времени без даты в текущей локали
- %y – год без столетия (от 00 до 99)
- %Y – год, включая столетие
- %Z – временная зона в виде смещения, аббривеатуры или полного наименования
- %% – символ `%’
Пример 1. Пример использования функции strftime() с разными локалями
<pre>
<?php
setlocale(LC_TIME, "C");
echo strftime("%A");
setlocale(LC_TIME, "fi_FI");
echo strftime(" по-фински - %A,");
setlocale(LC_TIME, "fr_FR");
echo strftime(" по-французски - %A и");
setlocale(LC_TIME, "de_DE");
echo strftime(" по-немецки - %A.\n");
setlocale(LC_TIME, 'ru_RU.CP1251');
echo strftime(" %A %d %B, %Y в %H:%M");
?>
</pre>
Как получить дату для записи в поля типа «timestamp», «DATE», «TIME», «TIMEDATE» таблицы MySQL
date(«Y-m-d»);
date(«H:i:s»);
date(«Y-m-d H:i:s»);
