Вычисление знака зодиака

Тут только что ASMO попросил помочь ему рассчитать знак зодиака зная timestamp даты рождения. Чего он тока на свой сайт не пихает))))

Мне чета вдруг захотелось написать что-то очень простое но элегантное.

Для этого мне понадобилось завести массив со значениями продолжительности влияния знака в секундах.

Для подсчета высокосных годов, надо узнать остаток от деления на полный высокосный цикл (365*24*60*60)*3+(366*24*60*60), получаться 126230400. Оставшееся нужно поделить на (365*24*60*60), остаток от этого деления это последний год из которого можно найти знак

Пример 1975-07-23 это 175298400 секунд с начала 1970 года. Поделив на 126230400 получаем остаток 49068000 а поделив это на 31536000 получаем 17532000. Это количество дней которое прошло с начала 1975 до дня рождения ASMO.

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

Еще одна поправка на высокосность года. 1970 (начало эры Unix) не был высокосным, высокосным был 72-й поэтому надо сравнивать текущий год с остатком от деления на высокосный цикл и если разница равна 2 то добавлять рыбам еще один день влияния.

Теперь перебирая массив дат нужно по очереди отнимать от найденного числа 17532000 периоды влияния знаков. Если остаток получается меньше величины влияния знака то данный знак и есть искомый.

В результате работы скрипта мы узнаем что ASMO — лев




$a = array(
	array("козерог", 1641600),	// 22.12-01.01
	array("водолей", 2592000),	// 21.01-20.02
	array("рыбы", 2419200),	// 21.02-20.03
	array("овен", 2592000),	// 21.03-20.04
	array("телец", 2505600),	// 21.04-20.05
	array("близнецы", 2678400),	// 21.05-21.06
	array("рак", 2592000),	// 22.06-22.07
	array("лев", 2678400),	// 23.07-23.08
	array("дева", 2592000),	// 24.08-23.09
	array("весы", 2505600),	// 24.09-23.10
	array("скорпион", 2505600),	// 24.10-22.11
	array("стрелец", 2419200), 	// 23.11-21.12
	array("козерог", 864000),	// 01.01-20.01
);

$birth = 175298400; // 1975-07-23
$a[2]['рыбы'] += floor(($birth % 126230400)/31536000) == 2 ? 86400 : 0;

$ostatok = ($birth % 126230400) % 31536000; 

foreach($a as $v)  {
	if($ostatok <= $v[1]) 
		break;
	$ostatok -= $v[1];	
}
echo $v[0];

Решил добавить еще тоже самое на JavaScript


var a = [
	["козерог", 1641600],	// 22.12-01.01
	["водолей", 2592000],	// 21.01-20.02
	["рыбы", 2419200],		// 21.02-20.03
	["овен", 2592000],		// 21.03-20.04
	["телец", 2505600],		// 21.04-20.05
	["близнецы", 2678400],	// 21.05-21.06
	["рак", 2592000],		// 22.06-22.07
	["лев", 2678400],		// 23.07-23.08
	["дева", 2592000],		// 24.08-23.09
	["весы", 2505600],		// 24.09-23.10
	["скорпион", 2505600],	// 24.10-22.11
	["стрелец", 2419200],	// 23.11-21.12
	["козерог", 864000],	// 01.01-20.01
];

a[2][1] += Math.floor((birth % 126230400) / 31536000) == 2 ? 86400 : 0;

var ostatok = (birth % 126230400) % 31536000;

for (var v in a) {
	if (ostatok <= a[v][1]) {
		break;
	}
	ostatok -= a[v][1];
}
alert(a[v][0]);

8 Комментарии “Вычисление знака зодиака

  1. Мавру, многочисленные рекспекты и уважуха. Код работает аки часы :) нихрена правда непонял расчета высокосного года, ну да ладно, работает и хорошо.

  2. JavaScript неверно показывает, что 1978-03-20 — это овен. Это ведь рыбы.
    И 1978-02-20 — это не рыбы, а водолей. И вообще, даты, на которых заканчиваются влияния знаков неверно показывают.

  3. Для корректного определения положения Солнца в зодиаке, таблиц приближенного соответствия календарным датам, которые иногда публикуются в прессе обычно не достаточно (пример такой таблицы см. выше). Для более точного определения положения Солнца в зодиаке (или, как говорят, «знака зодиака»), следует воспользоваться либо астрономическими формулами вычисления положения Солнца, либо эфемеридами, либо сложными компьютерными программами.

  4. Lex :
    Для корректного определения положения Солнца в зодиаке, таблиц приближенного соответствия календарным датам, которые иногда публикуются в прессе обычно не достаточно (пример такой таблицы см. выше). Для более точного определения положения Солнца в зодиаке (или, как говорят, «знака зодиака»), следует воспользоваться либо астрономическими формулами вычисления положения Солнца, либо эфемеридами, либо сложными компьютерными программами.

    ух ебать как сложно )))))))) это не надо блондинкам — посетительницам сайтов :D

Комментарии закрыты