Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.08.2017, 22:11
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 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);
из первого кода, переформатированную дату во второй?
Ответить с цитированием
  #2 (permalink)  
Старый 17.08.2017, 03:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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');
Ответить с цитированием
  #3 (permalink)  
Старый 17.08.2017, 03:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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');
Ответить с цитированием
  #4 (permalink)  
Старый 17.08.2017, 09:51
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Большое спасибо! Оба варианта прекрасно работают.
Ответить с цитированием
  #5 (permalink)  
Старый 17.08.2017, 10:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Второй и использовать, только добавить действие если дата некорректная.
Ответить с цитированием
  #6 (permalink)  
Старый 17.08.2017, 11:58
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Спасибо, но что-то мой код неправильно считает с 11 по 1 месяц, остальные все правильно.
Ответить с цитированием
  #7 (permalink)  
Старый 17.08.2017, 12:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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..., но позже.
Ответить с цитированием
  #8 (permalink)  
Старый 17.08.2017, 12:59
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 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");
?>
Ответить с цитированием
  #9 (permalink)  
Старый 17.08.2017, 13:01
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Сейчас сделала, чтобы он эти условиям соответствовал, но опять через переформатирование даты, а сразу без этого переформатирования можно сделать?
Ответить с цитированием
  #10 (permalink)  
Старый 17.08.2017, 13:06
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Хотя нет, переформатирование нужно, из-за substr($data,5).
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать два шаблона (кода) на одной странице palifeyo Общие вопросы Javascript 1 25.03.2017 12:31
Как объединить два обработчика в один? RioEiner jQuery 4 08.10.2015 15:40
скрыть из исходного кода часть javascript кода. javasc Javascript под браузер 10 12.03.2014 09:32
Как объединить два селектора? Nikkiru jQuery 5 11.12.2013 12:55
Как объединить два скрипта в один Dahunpao Events/DOM/Window 2 12.09.2013 19:17