- 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)]; //Стрелец
?>
eth0 01.07.2012 17:27 # +9
Духовка. Я родился под знаком духовки!
> Fish
Латинский язык такой латинский.
Ну и сравнения говно. Это или запихивается в формулу, или в массив.
bormand 01.07.2012 17:30 # +1
No comments.
Vindicar 01.07.2012 17:49 # +8
А вообще автор рожден под знаком говна.
killro0000 01.07.2012 17:56 # +8
vistefan 02.07.2012 13:57 # 0
Или я тут один знаю, что Lineage II делали корейцы из NCSoft?
bormand 02.07.2012 14:53 # +2
Lure Of Chaos 01.07.2012 20:18 # +2
nepster 01.07.2012 20:27 # +1
И выходит 2 return.
return 'Fish';
return null;
ну и sprintf я вообще никогда не использовал в практике. Я бы скорее для удобство передавал дату в функцию. Далее бы проверил ее на валидность, и 1 конструкцией, во избежания к примеру ifelse уже проверил все это дело.
bormand 01.07.2012 20:30 # 0
WHAT?! до return null дело дойдет только при кривых входных данных...
> Я бы скорее для удобство передавал дату в функцию.
Плюсую. Там же скорее всего день рождения и передают.
nepster 01.07.2012 20:34 # +2
Хотя как я заметил даты, это вообще больная тема почему то в php. Тут пол сайта в "датах" ))
interested 02.07.2012 09:52 # −5
Дата пытается отмерять промежуток времени ОГРОМНЫЙ. Несравнимо большего масштаба, чем жизнь сценария. Для сценария дата -- это не время, это совершенно сторонние метки, которые он получает от "Бога", потому что сам отмерять такие промежутки не способен.
Потому никогда, просто никогда не будет "хорошего" кода для дат.
Любой код, который содержит метку человеческого времени -- говнокод, потому что работает с данными, которые не могут быть получены с рациональной позиции сценарием.
Дальше хлеще: программист думает, что не удивительно, как человек. Для него промежуток времени в один год, месяц, день -- нормальные вещи. И он пытается свои представления втиснуть в сценарий.
Лично я вообще избегаю работы с человеческой датой в любом языке.
eth0 02.07.2012 13:33 # +3
Прохладный сказ, боярин.
Но я бы посоветовал слезть с тяжёлых наркотиков.Арифметика дат - нормальная арифметика. Все проблемы только в головах авторах, плюс нестабильности разных видов годов.
interested 02.07.2012 15:00 # −2
Они несоизмеримы. Это нормально ?!
Это катастрофа!
Давно уже пора отказываться от этой чепухи.
bormand 02.07.2012 15:06 # +1
Да. Люди же с этим столько лет жили.
> Давно уже пора отказываться от этой чепухи
Даешь месяцы по 32 дня и 256 дней в году! Всего-то немного притормозить вращение нашего голубого шарика вокруг его оси...
interested 02.07.2012 15:09 # −1
Люди очень долго жили в пещерах.
Вам туда ---> cave
bormand 02.07.2012 15:14 # +1
/me ушел в пещеру жарить мамонта
eth0 02.07.2012 16:04 # +3
bormand 02.07.2012 16:13 # +1
Вот когда люди будут жить в подземных городах, в которые не проникает солнечный свет, и не зависимо от времени года поддерживается постоянная температура... Тогда учет времени в годах и сутках и без помощи interested канет в лету... И люди самостоятельно перейдут на более простые временные метки...
eth0 02.07.2012 19:11 # +1
roman-kashitsyn 03.07.2012 13:26 # 0
eth0 03.07.2012 14:42 # 0
bormand 02.07.2012 14:53 # +2
Так и запишем - не осилил человеческих дат.
interested 02.07.2012 10:35 # 0
Действительно, даты можно вычитать, складывать и сравнивать.
Но.
Проблема именно в том, что для сценария это что угодно, любая абстрактная алгебра, а для программиста алгебра, обладающая "интуитивной логикой". И проблема именно в столкновении программиста со сценарием.
Есть такая штука, вы все знаете, это UNIX-метка-времени. Очень изящное решение, которое приводит алгебру дат, в алгебру целых, которая достаточно ясно реализована в машине и для нас интуитивна. Использование UNIX-метки устраняет свищ. При этом сама абстрактная алгебра даты может быть упрятана в библиотеки, которые легко использовать, чтобы пытаться узнать промежутки в нашей, человеческой, "интуитивной" дате.
vistefan 02.07.2012 14:03 # +2
>может быть упрятана в библиотеки, которые легко использовать
?
Библиотеки, которые легко использовать, основанные на ЮНИКС-метке - это плохой код?
interested 02.07.2012 15:08 # −1
Всё равно получается, что из попугаев в слоны дата не переводится. Нужно вычислять в слонах, если нужно в слонах.
Имея разность между двумя метками нельзя сказать сколько прошло дней или годов. Приблизительно можно, а вообще нельзя. Единица метки -- секунда, а секунда с днём и годом несоизмерима.
bormand 02.07.2012 15:13 # +1
> а секунда с днём и годом несоизмерима
Ну с годом то да, но с днем то какие траблы (кроме leap second)?
vistefan 02.07.2012 15:19 # +2
Например, когда говорят "ровно три месяца назад", то имеют ввиду именно это число только тремя месяцами ранее, а вот количество дней, прошедших с того момента сильно разнится в зависимости от того, какой именно месяц имеется ввиду...
Таким образом, невозможно точно сказать расстояние в днях между двумя точками во времени, между которыми известно точное расстояние в месяцах.
bormand 02.07.2012 15:30 # 0
Ну на самом деле оно не особо и нужно. Для человека месяц и, тем более, год - это достаточно большой срок. И когда человек говорит - "через 3 месяца", то он, как правило, подразумевает приблизительно 90 дней, а не какое-то более точное число...
Плюсы и минусы текущей календарной системы в том, что она заточена для удобства людей, а не машин. Как например я смогу с временной меткой сказать "встретимся завтра"? "встретимся в 3789127389+-100500"?
interested 02.07.2012 15:53 # −1
Если бы вас с детства воспитывали в других терминах дат, то вам бы сложности не составляло сказать: "Встретимся в следующих 100500".
И, конечно, дата для удобства людей... Прошлого тысячелетия.
Дата -- это такой огромный человеческий проект со множеством костылей и подпорок для обратной совместимости. Как PHP.
Нам привычно и удобно. И я с этим не спорю. Наш мозг много мощнее в этом плане, чем современные ЭВМ. Но нестройность наших ощущений и невозможность отображения их в машину приводит к нему: к говнокоду.
bormand 02.07.2012 16:02 # +1
Станете диктатором мира - прикажете всем юзать timestamp. А до этого момента все ваши предложения - не более чем высказывание очередного гения-идеалиста. Вы не первый, кто предлагает переделать календарь. Не вы и последний.
Но поймите, что человек в принципе не способен работать с большими числами и объемами данных. Все что человек добился - он делал за счет разбиения сложных задач на более простые подзадачи и построения иерархий.
Вот и с датами та же ситуация. Сейчас дата это иерархическая система, доступная почти любому человеку (и то не всем!). Если же вы заставите людей оперировать плоскими 9-10 значными числами, вы просто-напросто лишите большинства людей возможности пользоваться датами...
roman-kashitsyn 02.07.2012 17:05 # +3
А задротские таймстемпы к реальной жизни не приспособлены.
bormand 02.07.2012 17:11 # 0
Ну вот в такой ситуации они, в принципе, были бы приспособлены... Но это уже другая реальная жизнь ;)
guest 03.07.2012 13:41 # 0
Го-не-во.
Это просто странная система счисления, аппроксимирующая древние наблюдения с помощью кучи разных традиций. Задумайтесь об этом хотя бы на пару микровитков.
Lure Of Chaos 03.07.2012 16:16 # +1
bormand 03.07.2012 16:29 # 0
Lure Of Chaos 03.07.2012 16:31 # 0
bormand 03.07.2012 16:33 # 0
guest 03.07.2012 18:47 # 0
А вообще-то да, этот боян уже досконально обсудили.
interested 02.07.2012 15:20 # 0
Эслан его знает, что может повлиять на вращение Земли.
Так, глядишь, за сто лет и накопиться свищ.
guest 03.07.2012 18:49 # +3
Конечно же Нибиру
Lure Of Chaos 03.07.2012 18:57 # +4
eth0 03.07.2012 19:04 # +1
interested 02.07.2012 15:34 # −1
Есть две даты, нужно вычислить, скажем, зарплату. Зарплата идёт два раза в месяц, а раз в кватрал -- премия, а в конце года -- бонус. И вот нужно это дело вычислить...
Это кошмар!
bormand 02.07.2012 15:37 # +1
Ага, допустим 5го и 20го числа каждого месяца.
> Раз в квартал - премия
Ок, в марте, июне, сентябре и декабре.
> В конце года - бонус
Ок, в декабре.
Расчетные точки раставлены. Сколько рабочих дней между ними - известно. В чем проблемы? Вы еще предложите выходные отменить, потому что они, видите ли, усложнят вам расчет.
interested 02.07.2012 15:43 # −1
Нужно отдельно от дней переводить месяцы и проверять, а попадает ли этот декабрь в промежуток.
И так же со всеми премиальными месяцами.
А если бы этой путАницы не было бы, то можно было вычислять, не приводя в месяцы.
Мало того, что промежутки слонов в попугаи не переводятся, так ещё и смешиваются в дате! Дни с месяцами и годами.
Кошмар!
bormand 02.07.2012 16:15 # +1
bormand 02.07.2012 15:07 # +2
... к невозможности записать даты до 1900 года, и ограничению 2038 годом...
interested 02.07.2012 15:15 # −2
Оно из соизмеримых единиц.
Если вы не будете мешать человечеству развиваться, то придумают и длинную универсальную всюду соизмеримую метку. Без дней, месяцев и годов.
bormand 02.07.2012 15:20 # +2
Ага. Вот научатся все человеки ворочать в уме 9-10значные числа этой соизмеримой метки - тогда, глядишь, и сами к этому придут.
movaxbx 01.07.2012 20:39 # +2
Каких таких сравнений?
guest 03.07.2012 13:01 # 0
С точки зрения астрологии тут есть и другая существенная ошибка... смена знака не происходит в 00:00 со сменой дня календаря :) она должна точно высчитываться.
eth0 03.07.2012 13:19 # 0
А так да, нужно знать до часу рождения (хотя это больше для каких-то планетных карт).