Автор Тема: Даты < 1970  (Прочитано 4288 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Даты < 1970
« : 12 Апреля 2002, 14:40:19 »
Существует небольшая проблемка:
требуется узнать день недели с которого начинается месяц,
грубо говоря
есть апрель 1960,
Надо узнать каким днём недели было 1 апреля
Попытка:

date
("w",mktime(0,0,0,$month,1,$year));

Возвращает ошибку
ввиду (цитата из спецификации)

This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970) and the time specified


ЧТо делать помогите?
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Даты < 1970
« Ответ #1 : 12 Апреля 2002, 15:07:13 »
Сделай свой timestamp.
Берешь нужную тебе дату, находишь количество дней до 1.1.1970, делишь на 7, и по остатку находишь смещение относительно дня недели, которым было 1.1..1970.
:)
AS IS...

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Даты < 1970
« Ответ #2 : 12 Апреля 2002, 15:18:24 »
ThE0ReTiC
можно по подробнее плиз
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Даты < 1970
« Ответ #3 : 12 Апреля 2002, 15:25:09 »
AlieN
Я ж тебе все расписал. Алгоритм-то понятен?
AS IS...

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Даты < 1970
« Ответ #4 : 12 Апреля 2002, 15:39:45 »
ThE0ReTiC
сурс лучше был-бы
у меня трабл найти кол-во дней
а так-то усё просто
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Даты < 1970
« Ответ #5 : 12 Апреля 2002, 16:18:36 »
<?
$day 1;
$month 1;
$year 1963;

$ydelta 1970-$year;
$ddelta 0;

$y2d $ydelta*365;

$monts = array(31,28,31,30,31,30,31,31,30,31,30,31);
for(
$step=0;$step<($month-1);$step++)
{
$ddelta += $monts[$step];
}
$days $y2d-$ddelta-$day+1;

echo 
$days;
$fl $days 7;
echo\
'
\'.$fl;
?>

Тут только учета високосных лет нету.
Это тебе домашнее задание :)
AS IS...

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Даты < 1970
« Ответ #6 : 12 Апреля 2002, 16:48:50 »
вроде вот так:

<?php
$month
=1;
$day=1;
$year=1966;
$ddelta 0;
for(
$i=1969;$i>$year;--$i)
{
if(
$i%4==0){$y2d+=366;}
else{
$y2d+=365;}
}
$monts = array(31,28,31,30,31,30,31,31,30,31,30,31);
if(
$year%4==0){$monts[1]=29;}
for(
$step=0;$step<($month-1);$step++)
{
$ddelta += $monts[$step];
}
$days $y2d-$ddelta-$day+1;

$fl $days 7;

?>
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Даты < 1970
« Ответ #7 : 12 Апреля 2002, 16:51:22 »
А я сделал так:

<?
$ydelta 1970-$year;
$ddelta 0;

$viskor floor((1972-$year)/4);

$y2d $ydelta*365+$viskor;

$monts = array(31,28,31,30,31,30,31,31,30,31,30,31);

for(
$step=0;$step<($month-1);$step++)
{
$ddelta += $monts[$step];
}
$days $y2d-$ddelta-$day+1;


$fl $days 7;
?>

:)
AS IS...

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Даты < 1970
« Ответ #8 : 12 Апреля 2002, 16:56:39 »
у нас несходиться вроде :(
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Даты < 1970
« Ответ #9 : 12 Апреля 2002, 17:01:29 »
всё бы чудненько но запусти вот это:

<?php
$month
=1;
$day=1;
$year=1966;
$ddelta 0;
print 
"Я - ".ya($month,$day,$year)." Теоретик -".ter($month,$day,$year);
function 
ya($month,$day,$year)
{
for(
$i=1969;$i>$year;--$i)
	
	
{
	
	
if(
$i%4==0){$y2d+=366;}
	
	
else{
$y2d+=365;}
	
	
}
	
$monts = array(31,28,31,30,31,30,31,31,30,31,30,31);
	
if(
$year%4==0){$monts[1]=29;}
	
for(
$step=0;$step<($month-1);$step++)
	
	
{
	
	
$ddelta += $monts[$step];
	
	
}
	
$days $y2d-$ddelta-$day+1;
	
$NumberFirstDay $days 7;
	
return(
$NumberFirstDay);
}

function 
ter($month,$day,$year)
{
	
$ydelta 1970-$year;
	
$ddelta 0;

	
$viskor floor((1972-$year)/4);
	

	
$y2d $ydelta*365+$viskor;

	
$monts = array(31,28,31,30,31,30,31,31,30,31,30,31);

	
for(
$step=0;$step<($month-1);$step++)
	
{
	
$ddelta += $monts[$step];
	
}
	
$days $y2d-$ddelta-$day+1;

	
$fl $days 7;
	
return(
$fl);
}
?>
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Даты < 1970
« Ответ #10 : 12 Апреля 2002, 17:01:48 »
Я лебедевским парсером проверял:
http://www.parser.ru/examples/example3/calendar.html
Мое все сходится.
19 октября 1909 года - вторник и у него и у меня.

Полный код дать?
AS IS...

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Даты < 1970
« Ответ #11 : 12 Апреля 2002, 17:07:16 »
у тебя 0 - это воскресенье?
глянь плиз мой код где глюк
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Даты < 1970
« Ответ #12 : 12 Апреля 2002, 17:21:16 »
ThE0ReTiC
Скажи под каким цифрами что понимается*
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Даты < 1970
« Ответ #13 : 12 Апреля 2002, 17:28:28 »
Лови полный код.
Бага у меня все-таки была. В обсчете пограничных дат.

<?
$day_xor = array(0=>"Четверг",
	
	
	
      
1=>"Cреда",
	
	
	
	
2=>"Вторник",
	
	
	
	
3=>"Понедельник",
	
	
	
	
4=>"Воскресенье",
	
	
	
	
5=>"Суббота",
	
	
	
	
6=>"Пятница");
$mon = array(1=>\'Январь\',
	
	
	
     2=>\'Февраль\',
	
	
	
     3=>\'Март\',
	
	
	
     4=>\'Апрель\',
	
	
	
     5=>\'Май\',
	
	
	
     6=>\'Июнь\',
	
	
	
     7=>\'Июль\',
	
	
	
     8=>\'Август\',
	
	
	
     9=>\'Сентябрь\',
	
	
	
     10=>\'Октябрь\',
	
	
	
     11=>\'Ноябрь\',
	
	
	
     12=>\'Декабрь\'
	
	
	
     );


switch($action)
{
case 1:
$ydelta = 1970-$year;
$ddelta = 0;

$viskor = floor((1972-$year)/4);

$y2d = $ydelta*365+$viskor;
if (((1972-$year) % 4 == 0)AND($month > 2)):
$y2d--;
endif;
$monts = array(31,28,31,30,31,30,31,31,30,31,30,31);

for($step=0;$step<($month-1);$step++)
{
$ddelta += $monts[$step];
}

$days = $y2d-$ddelta-$day+1;


$fl = $days % 7;

echo $day.\'  \'.($mon[$month]).\'  \'.$year.\' - \'.$day_xor[$fl].\'
\';
break;
default:
echo \'<form action="\'.$HTT_SERVER_VARS[DOCUMENT_ROOT].\'" method="POST">\';
echo\'<input type="hidden" name="action" value="1">\';
echo\'День: <select name="day" style="width:50px">\';
for ($step = 1;$step<32;$step++)
	
	
	
{
	
	
	
echo \'<option value="\'.$step.\'">\'.$step.\'</option>\';
	
	
	
}
echo\'</select>\';
echo\'Месяц: <select name="month" style="width:50px">\';
	
	
	
for ($step = 1;$step<13;$step++)
	
	
	
{
	
	
	
echo \'<option value="\'.$step.\'">\'.$step.\'</option>\';
	
	
	
}
	
	
	
echo \'</select>  Год: <select name="year">\';

	
	
	
for ($step = 1900;$step<=1969;$step++)
	
	
	
{
	
	
	
	
echo \'<option value="\'.$step.\'">\'.$step.\'</option>\';
	
	
	
}
	
	
	
echo \'</select>  <input type="submit" value="Посчитать">\';
	
	
	
echo \'</form></td></tr>\';
break;
}
?>
AS IS...

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Даты < 1970
« Ответ #14 : 12 Апреля 2002, 21:41:02 »
не проще ли взять готовый алгоритм?
http://www.hotscripts.com/PHP/Scripts_and_Programs/Calendars/
с уважением,
магистр белой магии.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28