16.08.2017, 22:11
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Объединить два кода
Здравствуйте! Подскажите, пожалуйста, как можно объединить два кода. Есть код, который переформатирует дату рождения а нужный формат:
<?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);
из первого кода, переформатированную дату во второй?
|
|
17.08.2017, 03:19
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
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');
|
|
17.08.2017, 03:26
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
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');
|
|
17.08.2017, 09:51
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Большое спасибо! Оба варианта прекрасно работают.
|
|
17.08.2017, 10:19
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Второй и использовать, только добавить действие если дата некорректная.
|
|
17.08.2017, 11:58
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Спасибо, но что-то мой код неправильно считает с 11 по 1 месяц, остальные все правильно.
|
|
17.08.2017, 12:41
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Забыл указать массиву начинать индекс с 1, должно быть так:
$signsstart = [1=>21, 20, 20, 20, 20, 20, 21, 22, 23, 23, 23, 23];
Если при этом все равно будет неверное определение, то данный подход некорректный. Ошибка значит в датах $signsstart или смещениях.
Я не астролог, понятия не имею какой знак у кого и на каком основании, и до сей поры меня это и не интересовало. Попадалось, что определение его с точностью сложнее, чем данное представление. В сети же много решений этой задачи, включая и на РНР, посмотрите другое, может что-то более корректное есть.
Ну а не получится, посмотрю, что вообще означает 21, 20, 20, 20, 20..., но позже.
|
|
17.08.2017, 12:59
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Вот этот корректно считает, но опять формат вывода даты нужен не 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");
?>
|
|
17.08.2017, 13:01
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Сейчас сделала, чтобы он эти условиям соответствовал, но опять через переформатирование даты, а сразу без этого переформатирования можно сделать?
|
|
17.08.2017, 13:06
|
Профессор
|
|
Регистрация: 07.07.2016
Сообщений: 281
|
|
Хотя нет, переформатирование нужно, из-за substr($data,5).
|
|
|
|