- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
<?php
/**
* Определение знака зодиака
* автор: Nc_Soft
* 12.01.09
*/
//массив для сравнений
$zodiak=array(
'Oven'=>'Овен',
'Taurus'=>'Телец',
'Gemini'=>'Близнецы',
'Cancer'=>'Рак',
'Leo'=>'Лев',
'Virgo'=>'Дева',
'Libra'=>'Весы',
'Scorpion'=>'Скорпион',
'Sagittarius'=>'Стрелец',
'Capricorn'=>'Козерог',
'Aquarius'=>'Водолей',
'Fish'=>'Рыбы'
);
//функция опеределения
function zodiak($d,$m) {
$d=sprintf('%02d',$d);
$m=sprintf('%02d',$m);
if (($m=='03' AND $d>20) OR ($m=='04' AND $d<21)) return 'Oven';
if (($m=='04' AND $d>20) OR ($m=='05' AND $d<22)) return 'Taurus';
if (($m=='05' AND $d>21) OR ($m=='06' AND $d<22)) return 'Gemini';
if (($m=='06' AND $d>21) OR ($m=='07' AND $d<23)) return 'Cancer';
if (($m=='07' AND $d>22) OR ($m=='08' AND $d<24)) return 'Leo';
if (($m=='08' AND $d>23) OR ($m=='09' AND $d<24)) return 'Virgo';
if (($m=='09' AND $d>23) OR ($m=='10' AND $d<24)) return 'Libra';
if (($m=='10' AND $d>23) OR ($m=='11' AND $d<23)) return 'Scorpion';
if (($m=='11' AND $d>22) OR ($m=='12' AND $d<22)) return 'Sagittarius';
if (($m=='12' AND $d>21) OR ($m=='01' AND $d<19)) return 'Capricorn';
if (($m=='01' AND $d>20) OR ($m=='02' AND $d<19)) return 'Aquarius';
if (($m=='02' AND $d>18) OR ($m=='03' AND $d<21)) return 'Fish';
return null;
}
//тестирование (пример для 3 декабря)
echo $zodiak[zodiak(3,12)]; //Стрелец
?>
Духовка. Я родился под знаком духовки!
> Fish
Латинский язык такой латинский.
Ну и сравнения говно. Это или запихивается в формулу, или в массив.
No comments.
А вообще автор рожден под знаком говна.
Или я тут один знаю, что Lineage II делали корейцы из NCSoft?
И выходит 2 return.
return 'Fish';
return null;
ну и sprintf я вообще никогда не использовал в практике. Я бы скорее для удобство передавал дату в функцию. Далее бы проверил ее на валидность, и 1 конструкцией, во избежания к примеру ifelse уже проверил все это дело.
WHAT?! до return null дело дойдет только при кривых входных данных...
> Я бы скорее для удобство передавал дату в функцию.
Плюсую. Там же скорее всего день рождения и передают.
Хотя как я заметил даты, это вообще больная тема почему то в php. Тут пол сайта в "датах" ))
Дата пытается отмерять промежуток времени ОГРОМНЫЙ. Несравнимо большего масштаба, чем жизнь сценария. Для сценария дата -- это не время, это совершенно сторонние метки, которые он получает от "Бога", потому что сам отмерять такие промежутки не способен.
Потому никогда, просто никогда не будет "хорошего" кода для дат.
Любой код, который содержит метку человеческого времени -- говнокод, потому что работает с данными, которые не могут быть получены с рациональной позиции сценарием.
Дальше хлеще: программист думает, что не удивительно, как человек. Для него промежуток времени в один год, месяц, день -- нормальные вещи. И он пытается свои представления втиснуть в сценарий.
Лично я вообще избегаю работы с человеческой датой в любом языке.
Прохладный сказ, боярин.
Но я бы посоветовал слезть с тяжёлых наркотиков.Арифметика дат - нормальная арифметика. Все проблемы только в головах авторах, плюс нестабильности разных видов годов.
Они несоизмеримы. Это нормально ?!
Это катастрофа!
Давно уже пора отказываться от этой чепухи.
Да. Люди же с этим столько лет жили.
> Давно уже пора отказываться от этой чепухи
Даешь месяцы по 32 дня и 256 дней в году! Всего-то немного притормозить вращение нашего голубого шарика вокруг его оси...
Люди очень долго жили в пещерах.
Вам туда ---> cave
/me ушел в пещеру жарить мамонта
Вот когда люди будут жить в подземных городах, в которые не проникает солнечный свет, и не зависимо от времени года поддерживается постоянная температура... Тогда учет времени в годах и сутках и без помощи interested канет в лету... И люди самостоятельно перейдут на более простые временные метки...
Так и запишем - не осилил человеческих дат.
Действительно, даты можно вычитать, складывать и сравнивать.
Но.
Проблема именно в том, что для сценария это что угодно, любая абстрактная алгебра, а для программиста алгебра, обладающая "интуитивной логикой". И проблема именно в столкновении программиста со сценарием.
Есть такая штука, вы все знаете, это UNIX-метка-времени. Очень изящное решение, которое приводит алгебру дат, в алгебру целых, которая достаточно ясно реализована в машине и для нас интуитивна. Использование UNIX-метки устраняет свищ. При этом сама абстрактная алгебра даты может быть упрятана в библиотеки, которые легко использовать, чтобы пытаться узнать промежутки в нашей, человеческой, "интуитивной" дате.
>может быть упрятана в библиотеки, которые легко использовать
?
Библиотеки, которые легко использовать, основанные на ЮНИКС-метке - это плохой код?
Всё равно получается, что из попугаев в слоны дата не переводится. Нужно вычислять в слонах, если нужно в слонах.
Имея разность между двумя метками нельзя сказать сколько прошло дней или годов. Приблизительно можно, а вообще нельзя. Единица метки -- секунда, а секунда с днём и годом несоизмерима.
> а секунда с днём и годом несоизмерима
Ну с годом то да, но с днем то какие траблы (кроме leap second)?
Например, когда говорят "ровно три месяца назад", то имеют ввиду именно это число только тремя месяцами ранее, а вот количество дней, прошедших с того момента сильно разнится в зависимости от того, какой именно месяц имеется ввиду...
Таким образом, невозможно точно сказать расстояние в днях между двумя точками во времени, между которыми известно точное расстояние в месяцах.
Ну на самом деле оно не особо и нужно. Для человека месяц и, тем более, год - это достаточно большой срок. И когда человек говорит - "через 3 месяца", то он, как правило, подразумевает приблизительно 90 дней, а не какое-то более точное число...
Плюсы и минусы текущей календарной системы в том, что она заточена для удобства людей, а не машин. Как например я смогу с временной меткой сказать "встретимся завтра"? "встретимся в 3789127389+-100500"?
Если бы вас с детства воспитывали в других терминах дат, то вам бы сложности не составляло сказать: "Встретимся в следующих 100500".
И, конечно, дата для удобства людей... Прошлого тысячелетия.
Дата -- это такой огромный человеческий проект со множеством костылей и подпорок для обратной совместимости. Как PHP.
Нам привычно и удобно. И я с этим не спорю. Наш мозг много мощнее в этом плане, чем современные ЭВМ. Но нестройность наших ощущений и невозможность отображения их в машину приводит к нему: к говнокоду.
Станете диктатором мира - прикажете всем юзать timestamp. А до этого момента все ваши предложения - не более чем высказывание очередного гения-идеалиста. Вы не первый, кто предлагает переделать календарь. Не вы и последний.
Но поймите, что человек в принципе не способен работать с большими числами и объемами данных. Все что человек добился - он делал за счет разбиения сложных задач на более простые подзадачи и построения иерархий.
Вот и с датами та же ситуация. Сейчас дата это иерархическая система, доступная почти любому человеку (и то не всем!). Если же вы заставите людей оперировать плоскими 9-10 значными числами, вы просто-напросто лишите большинства людей возможности пользоваться датами...
А задротские таймстемпы к реальной жизни не приспособлены.
Ну вот в такой ситуации они, в принципе, были бы приспособлены... Но это уже другая реальная жизнь ;)
Го-не-во.
Это просто странная система счисления, аппроксимирующая древние наблюдения с помощью кучи разных традиций. Задумайтесь об этом хотя бы на пару микровитков.
А вообще-то да, этот боян уже досконально обсудили.
Эслан его знает, что может повлиять на вращение Земли.
Так, глядишь, за сто лет и накопиться свищ.
Конечно же Нибиру
Есть две даты, нужно вычислить, скажем, зарплату. Зарплата идёт два раза в месяц, а раз в кватрал -- премия, а в конце года -- бонус. И вот нужно это дело вычислить...
Это кошмар!
Ага, допустим 5го и 20го числа каждого месяца.
> Раз в квартал - премия
Ок, в марте, июне, сентябре и декабре.
> В конце года - бонус
Ок, в декабре.
Расчетные точки раставлены. Сколько рабочих дней между ними - известно. В чем проблемы? Вы еще предложите выходные отменить, потому что они, видите ли, усложнят вам расчет.
Нужно отдельно от дней переводить месяцы и проверять, а попадает ли этот декабрь в промежуток.
И так же со всеми премиальными месяцами.
А если бы этой путАницы не было бы, то можно было вычислять, не приводя в месяцы.
Мало того, что промежутки слонов в попугаи не переводятся, так ещё и смешиваются в дате! Дни с месяцами и годами.
Кошмар!
... к невозможности записать даты до 1900 года, и ограничению 2038 годом...
Оно из соизмеримых единиц.
Если вы не будете мешать человечеству развиваться, то придумают и длинную универсальную всюду соизмеримую метку. Без дней, месяцев и годов.
Ага. Вот научатся все человеки ворочать в уме 9-10значные числа этой соизмеримой метки - тогда, глядишь, и сами к этому придут.
Каких таких сравнений?
С точки зрения астрологии тут есть и другая существенная ошибка... смена знака не происходит в 00:00 со сменой дня календаря :) она должна точно высчитываться.
А так да, нужно знать до часу рождения (хотя это больше для каких-то планетных карт).