|
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-разрядная архитектура не умрёт окончательно.
|
|