Объединить два кода
Здравствуйте! Подскажите, пожалуйста, как можно объединить два кода. Есть код, который переформатирует дату рождения а нужный формат:
<?php $date = "29.4.1993"; echo date("d,m", strtotime($date)); ?> и код определяющий знак зодиака по дате рождения: <?php function getZodiacalSign($day, $month){ $signs = array("Козерог","Водолей","Рыбы","Овен","Телец","Близнецы","Рак","Лев","Девы","Весы","Скорпион","Стрелец"); $signsstart = array(1=>21,2=>20,3=>20,4=>20,5=>20,6=>20,7=>21,8=>22,9=>23,10=>23,11=>23,12=>23); return $day < $signsstart[$month +1]? $signs[$month -1]: $signs[$month %12];} echo getZodiacalSign(29,4); ?> Как подставить в echo getZodiacalSign(29,4);из первого кода, переформатированную дату во второй? |
function getZodiacalSign($date){ if($date = strtotime($date)) { list($day, $month) = explode('.', date('d.m', $date)); $signs = ["Козерог","Водолей","Рыбы","Овен","Телец","Близнецы","Рак","Лев","Девы","Весы","Скорпион","Стрелец"]; $signsstart = [21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23]; return $day < $signsstart[$month +1]? $signs[$month -1]: $signs[$month %12]; } } echo getZodiacalSign('29.4.1993'); |
function getZodiacalSign($date){ $date = date_parse($date); if(!$date['errors']) { $signs = ["Козерог","Водолей","Рыбы","Овен","Телец","Близнецы","Рак","Лев","Девы","Весы","Скорпион","Стрелец"]; $signsstart = [21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23]; return $date['day'] < $signsstart[$date['month'] +1]? $signs[$date['month'] -1]: $signs[$date['month'] %12]; } } echo getZodiacalSign('29.4.1993'); |
Большое спасибо! Оба варианта прекрасно работают.
|
Второй и использовать, только добавить действие если дата некорректная.
|
Спасибо, но что-то мой код неправильно считает с 11 по 1 месяц, остальные все правильно.
|
Забыл указать массиву начинать индекс с 1, должно быть так:
$signsstart = [1=>21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23]; Если при этом все равно будет неверное определение, то данный подход некорректный. Ошибка значит в датах $signsstart или смещениях. Я не астролог, понятия не имею какой знак у кого и на каком основании, и до сей поры меня это и не интересовало. Попадалось, что определение его с точностью сложнее, чем данное представление. В сети же много решений этой задачи, включая и на РНР, посмотрите другое, может что-то более корректное есть. Ну а не получится, посмотрю, что вообще означает 21, 20, 20, 20, 20..., но позже. |
Вот этот корректно считает, но опять формат вывода даты нужен не 29-04-1993, как в коде, а 29.4.1993.
<?php function znakZodiaka($data){ $day = str_replace("-","",substr($data,5)); $zodiak = array('ot' => array('0120','0219','0321','0421','0521','0622','0723','0823','0923','1024','1123','1222','0101'), 'do' => array('0218','0320','0420','0520','0621','0722','0822','0922','1023','1122','1221','1231','0119'), 'zn' => array('Водолей','Рыбы','Овен','Телец','Близнец','Рак','Лев','Дева','Весы','Скорпион','Стрелец','Козерог','Козерог')); $i = 0; while (empty($znak) && ($i < 13)){ $znak = (($zodiak['ot'][$i] <= $day) && ($zodiak['do'][$i] >= $day)) ? $zodiak['zn'][$i] : null; ++$i; } return $znak; } echo znakZodiaka("2010-06-18"); ?> |
Сейчас сделала, чтобы он эти условиям соответствовал, но опять через переформатирование даты, а сразу без этого переформатирования можно сделать?
|
Хотя нет, переформатирование нужно, из-за substr($data,5).
|
Часовой пояс GMT +3, время: 23:45. |