Объединить два кода 
		
		
		
		Здравствуйте! Подскажите, пожалуйста, как можно объединить два кода. Есть код, который переформатирует дату рождения а нужный формат: 
	
<?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). 
	 | 
	
		
 $signsstart = [1=>21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23];помогло, но 12 месяц все равно не правильно считает. "21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23" - это числа месяца (они сейчас не правильно расставлены по гороскопу, но сейчас не в этом суть), в последнем коде делается разрыв 12 месяца и 1 - вот так 1222 (22 декабря) до 1231 (31 декабря), и потом 0101 (1 января) до 0119 (19 января), хотя это и один зодиакальный месяц. В этом же коде этого нет и возможно именно это и является причиной некорректного подсчета.  | 
	
		
 Не копируйте код как есть, то есть выбрасывайте из него необдуманное, и тогда проблем меньше будет. 
	Функция strtotime преобразовывает дату в штамп времени, и как при этом она будет написана, дд.мм.гггг или дд-мм-гггг, или гггг.мм.дд, или гггг-мм-дд, или еще как либо, это не важно. Данная функция также корректно преобразует и английскую нотацию в метку времени. Вот это $day = str_replace("-","",substr($data,5)); выбросить заменив на: 
$date = date_parse($date);
    if(!$date['errors']) {
        $day = $date['month'] . $date['day'];
        //дальше по коду
    }
Не копируйте код, читайте о функциях.  | 
| Часовой пояс GMT +3, время: 10:23. |