Pers.narod.ru. PHP. Статьи. UNIX TimeStamp online |
Мдя, понадобился идущий timestamp, а онлайн навскидку ничего не попалось. Что такое Unix time stamp, зачем он нужен и когда перестанет работать - вот здесь, там же и сервис для пересчёта timestamp'ов в даты и обратно, вот только метка времени не идёт... в смысле, не двигается в реальном времени :) Понятно, что каждый раз перегружать страницу, чтоб увидеть серверную метку времени, глупо и медленно, проще вставить пару строк на Javascript, можно надеяться, что точность яваскрипта достаточно высока, чтоб прибавлять по секунде времени и не создать заметных отклонений без перезагрузки страницы. Использовать JQuery и прочие аяксы (как сделано в сервисе по ссылке) - из пушки по воробьям...
Мне хватило вот такого простейшего сервиса, написанного за пару минут (здесь вызываю из тега <iframe>, возможно, в кривоватых браузерах при первой загрузке понадобится обновить страницу статьи; также в браузере должен быть включён яваскрипт):
А вот полный исходник шыдевра:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html; charset=Windows-1251" http-equiv="content-type"> <title>TimeStamp</title> <script type="text/javascript"> var time=0; function set (t) { time=t; window.setTimeout('show()', 1000); } function show () { time++; document.getElementById('time').innerHTML=time; window.setTimeout('show()', 1000); } </script> </head> <body> <?php $t=time(); echo '<p>UNIX timestamp now is <span id="time">'.$t."</span>\n". '<script type="text/javascript">set('.$t.');</script>', '<p>Time fixed in ',gmdate("d M Y, H:i:s"),' GMT, server time is ',date("d M Y, H:i:s"),'</p>', '<p><a href="',$_SERVER['PHP_SELF'],'">Reload</a></p>'; ?> </body> </html>
А в этом примере мы вычисляем, время, когда перестанет работать 32-разрядный Unix timestamp:
<?php //Вычисляем время, когда перестанет работать //32-разрядный Unix timestamp $t=time(); $MAXINT = 2147483647; $till = $MAXINT - $t; $ds=sprintf("%d",$till/86400); echo 'Max.date=',date("d M Y, H i s",$MAXINT), ' till ',$ds,' day(s)'; ?>
Вот что выдал этот код:
Max.date=19 Jan 2038, 09 14 07 till 9428 day(s)
Почему именно 2147483647 как максимальное значение timestamp? Потому что 2147483647 - это максимальное 32-битное целое со знаком, так что
long int x=2147483647; cout << "2147483647+1=" << (x+1);
не только на C++ выдаст ответ
2147483647+1=-2147483648
Ведь время 1 января 1970, 00:00:00 GMT было значением ноль метки времени Unix, значит, число надо рассматривать как знаковое. Вот тогда-то и будет пресловутая "проблема-2000", если, конечно, к тому времени 32-разрядная архитектура не умрёт окончательно.
гостевая; E-mail |