Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Задачка по вычислению времени
 
 автор: Владимир55   (28.10.2007 в 14:54)   письмо автору
 
 

Первого января 1980 года в 0:0 началась некая астрономическая эпоха.
Спрашивается, сколько суток прошло с на начала этой эпохи по состоянию на 27 июля 1980 года?

Ответ из Астрономического ежегодника: 209


$mktime_1 = mktime(0, 0, 0, 1, 1, 1980);
$mktime_2 = mktime(0, 0, 0, 7, 27, 1980);
echo ($mktime_2 - $mktime_1) / 86400 ;

Результат: 207.958333333

Почему так?

   
 
 автор: Unkind   (28.10.2007 в 15:23)   письмо автору
 
   для: Владимир55   (28.10.2007 в 14:54)
 

Проверьте код, что написали тут и тот, что в скрипте. Ваш код выводит у меня 208. А 208 вместо 209, потому что надо писать $mktime_1 = mktime(0, 0, 0, 0, 0, 1980);
Ведь в 00:00 1-ого 1980 года еще не прошло и секунды, не говоря о сутках. Не так ли?

   
 
 автор: Владимир55   (28.10.2007 в 15:39)   письмо автору
 
   для: Unkind   (28.10.2007 в 15:23)
 

Можно для теста сделать вот что:

$mktime_1 = mktime(0, 0, 0, 1, 1, 1980);
$mktime_2 = mktime(0, 0, 0, 7, 27, 1980);
$mktime = $mktime_2 - $mktime_1 ;
echo "<br> mktime = $mktime ";
echo "<br>";
echo ($mktime_2 - $mktime_1) / 86400 ;

Разница в секундах составляет 17967600. Если на калькуляторе это число разделить на 86400, то получается 207.958333333. Целого числа не получается. Почему - непонятно.

** надо писать $mktime_1 = mktime(0, 0, 0, 0, 0, 1980);
Ведь в 00:00 1-ого 1980 года еще не прошло и секунды, не говоря о сутках. Не так ли? **

Конечно так! Но результат от этого удивительный:

$mktime_1 = mktime(0, 0, 0, 0, 0, 1980);
$mktime_2 = mktime(0, 0, 0, 7, 27, 1980);
echo ($mktime_2 - $mktime_1) / 86400 ;

Вывод: 239.958333333

   
 
 автор: Unkind   (28.10.2007 в 16:06)   письмо автору
 
   для: Владимир55   (28.10.2007 в 15:39)
 

А Вы время на час назад перевели?

   
 
 автор: Владимир55   (28.10.2007 в 16:26)   письмо автору
 
   для: Unkind   (28.10.2007 в 16:06)
 

Компьютер автоматически скорректировал время, я даже этого не заметил.

Но как это могло сказаться на расчетах событий четвертьвековой давности, о которых тут речь?

   
 
 автор: Unkind   (28.10.2007 в 16:36)   письмо автору
 
   для: Владимир55   (28.10.2007 в 16:26)
 

Как-то странно у Вас выходит. На час различие. При чем, похоже, mktime() в одном случае возвращает такое же значение, как и у меня, а во втором случае у нас получились разные значения.

<?php
$mktime_1 
mktime(000001980); 
$mktime_2 mktime(0007271980);

echo 
$mktime_1" "$mktime_2//?
?>

   
 
 автор: Владимир55   (28.10.2007 в 16:54)   письмо автору
 
   для: Unkind   (28.10.2007 в 16:36)
 


    $mktime_1 = mktime(0, 0, 0, 0, 0, 1980);
    $mktime_2 = mktime(0, 0, 0, 7, 27, 1980);
echo $mktime_1, " ", $mktime_2; //?
    echo "<br> ";
    echo ($mktime_2 - $mktime_1) ;
    echo "<br> ";
    echo ($mktime_2 - $mktime_1) / 86400 ;

Получаем:
312757200 333489600
20732400
239.958333333

   
 
 автор: Unkind   (28.10.2007 в 18:20)   письмо автору
 
   для: Владимир55   (28.10.2007 в 16:54)
 

Действительно странно. У меня второе значение (mktime(0, 0, 0, 7, 27, 1980)) равно 333493200, а у Вас - 333489600. То есть у меня на 3600 секунд больше. По идее, тогда первое должно отличаться тоже. Но нет...

   
 
 автор: Владимир55   (28.10.2007 в 18:49)   письмо автору
 
   для: Unkind   (28.10.2007 в 18:20)
 

Вероятно, причиной является переход на летнее время, произошедший 30 марта 1980 года.

    $mktime_30 = mktime(0, 0, 0, 3, 30, 1980);
    echo "<br>30 марта =  $mktime_30";

    $mktime_31 = mktime(0, 0, 0, 3, 31, 1980);
    echo "<br>31 марта =  $mktime_31";
    echo "<br> Сутки длятся - ";
    echo ($mktime_31 - $mktime_30) ;

Получаем:
30 марта = 323211600
31 марта = 323294400
Сутки длятся - 82800

То есть эти сутки короче обычных...

Похоже?

Если так, то лекарство

$mktime_30 = mktime(0, 0, 0, 3, 30, 1980, 1);

   
 
 автор: elenaki   (28.10.2007 в 16:36)   письмо автору
 
   для: Владимир55   (28.10.2007 в 16:26)
 

кажется, июль - не седьмой, а шестой месяц. нумерация начинается с 0.

   
 
 автор: Владимир55   (28.10.2007 в 16:58)   письмо автору
 
   для: elenaki   (28.10.2007 в 16:36)
 

Может быть и так.
Однако в примере применения mktime в справочнике на этом сайте можно прочесть:

echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998)); // - "Jan-01-1998"

   
 
 автор: sim5   (28.10.2007 в 19:03)   письмо автору
 
   для: Владимир55   (28.10.2007 в 16:58)
 


<?
echo mktime(00072719800);
echo 
mktime(00072719801);

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования