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

Форум PHP

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

 

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

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

тема: Работа с датами, меньшими 1970 года.
 
 автор: Владимир55   (29.11.2007 в 20:50)   письмо автору
 
 

Наверняка тема не нова, но поиск по Форуму не дал ответа.

Как узнать, кокой был день недели, например 25 сентября 1965 года?

   
 
 автор: Trianon   (29.11.2007 в 21:13)   письмо автору
 
   для: Владимир55   (29.11.2007 в 20:50)
 

применяя функции для работы с юлианским календарем.
gregoriantojd()

в принципе, конечно, date() должно работать от 1901 года, но в win-реализациях с преобразованием отрицательных значений почему-то имеют место баги.

   
 
 автор: Владимир55   (29.11.2007 в 23:05)   письмо автору
 
   для: Trianon   (29.11.2007 в 21:13)
 

Попробовал так:

 $jd = JulianToJD(11, 29, 2007);
echo "$jd\n";

echo "<br>" ;
$juliant = JDDayOfWeek($jd,1);
echo "$juliant\n";

Выдает Wednesday, хотя сегодня, вроде бы, четверг!

   
 
 автор: XP   (29.11.2007 в 23:39)   письмо автору
 
   для: Владимир55   (29.11.2007 в 20:50)
 

можно написать свою функцию

<?
  
function dmg ($d$m$g// день месяц год
  
{
    
$g $g 1900;
    if (
$m 2)
    {
      
$m $m 2;
    }
    else
    {
      
$m $m 10;
      
$g $g 1;
    }
    
$days = (int)(365.25 $g) + (int)(30.59 $m) + $d 1;
    return 
$days 7;
  }
?>

функция возвращает номер дня. Работает от 1900г. до 2100г.

   
 
 автор: Владимир55   (29.11.2007 в 23:50)   письмо автору
 
   для: XP   (29.11.2007 в 23:39)
 

Функция интересная, но мне надо найти день недели...

   
 
 автор: XP   (29.11.2007 в 23:56)   письмо автору
 
   для: Владимир55   (29.11.2007 в 23:50)
 

вот..

<?
 
function dmg ($d$m$g// день месяц год
  
{
    
$g $g 1900;
    if (
$m 2)
    {
      
$m $m 2;
    }
    else
    {
      
$m $m 10;
      
$g $g 1;
    }
    
$days = ((int)(365.25 $g) + (int)(30.59 $m) + $d 1) % 7;
    if (
$days == 1$day "Monday";
    if (
$days == 2$day "Tuesday";
    if (
$days == 3$day "Wednesday";
    if (
$days == 4$day "Thursday";
    if (
$days == 5$day "Friday";
    if (
$days == 6$day "Saturday";
    if (
$days == 7$day "Sunday";
    return 
$day;
  }
?>

   
 
 автор: Владимир55   (30.11.2007 в 00:27)   письмо автору
 
   для: XP   (29.11.2007 в 23:56)
 

Как то это всё так просто у Вас получилось, я прям не знаю, что и сказать...

И - главное! - отлично работает!

БОЛЬШОЕ спасибо!

   
 
 автор: Trianon   (30.11.2007 в 00:47)   письмо автору
 
   для: XP   (29.11.2007 в 23:56)
 

В конце концов есть определение високосного года.
Кратным четырем он был как раз у Цезаря.

Эта функция за пределами 1901....2100 будет работать через ж.
Поправка. По воскресеньям она вообще будет отдыхать.

   
 
 автор: Владимир55   (30.11.2007 в 00:58)   письмо автору
 
   для: Trianon   (30.11.2007 в 00:47)
 

Я несколько поторопился с оценкой...
На первый взгляд, работает нормально, но при подробном тестировании вылезли нюансы. А может, я чего делаю неверно, с этими функциями я как-то не очень. В общем, вот при таком раскладе:

     function dmg ($d, $m, $g) // день месяц год
      {
        $g = $g - 1900;
        if ($m > 2)
        {
              $m = $m - 2;
        }
        else
        {
              $m = $m + 10;
              $g = $g - 1;
        }
        $days = ((int)(365.25 * $g) + (int)(30.59 * $m) + $d + 1) % 7;
        if ($days == 1) $day = "Monday";
        if ($days == 2) $day = "Tuesday";
        if ($days == 3) $day = "Wednesday";
        if ($days == 4) $day = "Thursday";
        if ($days == 5) $day = "Friday";
        if ($days == 6) $day = "Saturday";
        if ($days == 7) $day = "Sunday";
        return $day;
      }

    $abc = dmg(30, 11, 1981);

    echo "<br> День недели - $abc" ;

получается Понедельник, хотя на самом деле 30 ноября 1981 года было воскресенье. А если задать 30 ноября 1980 года, то получаем

Undefined variable: day in w:\home\lucky\www\21\otvet.php on line 90

что соответствует return $day;

   
 
 автор: Trianon   (30.11.2007 в 00:45)   письмо автору
 
   для: Владимир55   (29.11.2007 в 23:50)
 

Если уж Вы применяете честную функцию выбора дня недели, надо честно указывать и сам календарь, а не пытаться жить что называется по старому стилю.


$yy = 2007; $mm = 11; $dd = 29;
$jd = cal_to_jd(CAL_GREGORIAN, $mm,$dd, $yy);
$juliant = JDDayOfWeek($jd,1);
echo "$yy:$mm:$dd:$jd : $juliant<br/>\r\n";  

   
 
 автор: Владимир55   (30.11.2007 в 01:12)   письмо автору
 
   для: Trianon   (30.11.2007 в 00:45)
 

Да, вот теперь всё корректно!

Спасибо!

   
Rambler's Top100
вверх

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