Преобразование секунд с начала эпохи в полное время

Проблема

Требуется преобразовать количество секунд с начала эпохи в отдельные значения дня, месяца, года и т. д.

Решение

Воспользуйтесь функцией localtime или gmtime в зависимости от того, хотите ли вы получить дату/время для текущего часового пояса или для Гринвичского меридиана.
($seconds, $minutes, $hours, $day_of_month, $year,
$wday, $yday, $isdst) = localtime($time);
Стандартные модули Time::timelocal и Time::gmtime переопределяют функции localtime и gmtime так, чтобы к компонентам можно было обращаться по именам:
use Time::localtime;       # или Time::gmtime
$tm = localtime($TIME);    # или gmtime($TIME)
$seconds = $tm->sec; 
# ...

Комментарий

Функции localtime и gettime возвращают несколько странную информацию о годе и месяце; из года вычитается 1900, а нумерация месяцев начинается с 0 (январь). Не забудьте исправить полученные величины, как это делается в следующем примере:
{$seconds, $minutes, $hours, $day_of_month, $month, $year,
$wday, $yday, $isdst) = localtime($time);
printf( "Dateline: %02d:%02d:%02d-%04d/%02d/%02d\n",
$hours, $minutes, $seconds, $year+1900, $montn+1,
$day_of_month);
Модуль Time::localtime позволяет избавиться от временных переменных:
use Time::localtime;
$tm = localtime($time);
printf("Dateline: %02d:%02d:%02d-%04d/%02d/%02d\n",
$tm->hour, $tm->min, $tm->sec, $tm->year+1900,
$tm->mon+1, $tm->mday);

См. также

Описание функции localtime



2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: