За последние 24 часа нас посетили 16583 программиста и 1599 роботов. Сейчас ищут 1266 программистов ...

Почему неправильно работает функция времени-даты?

Тема в разделе "PHP для новичков", создана пользователем Bonso, 27 окт 2024.

  1. Bonso

    Bonso Новичок

    С нами с:
    18 янв 2024
    Сообщения:
    10
    Симпатии:
    0
    Есть массив гороскопов. Пользователь вводит дату своего рождения в инпут и после отправки формы должен определиться его знак зодиака и выводится предсказание для его знака на текущий день.


    PHP:
    1. <?php
    2.  
    3. // №11
    4.  
    5. echo '<form action="" method="GET">';
    6. echo '<input type="date" name="birthday">';
    7. echo '<input type="submit" value="отправить">';
    8. echo '</form>';
    9.  
    10. $horoscopes =
    11.     [
    12.         'Овны' => 'найдите в себе желание радоваться этой жизни, даже если не очень хочется.',
    13.         'Тельцы' => 'сегодня даже работа ответит вам взаимностью.',
    14.         'Близнецы' => 'умерьте аппетиты и не выходите за рамки разумного.',
    15.         'Раки' => 'вы в отличной физической форме и преодолеете все препятствия.',
    16.         'Львы' => 'у вас есть тактика, вот её и придерживайтесь.',
    17.         'Девы' => 'кто-то захочет совершить нападение на ваше сердце.',
    18.         'Весы' => 'настроение будет на высоте, а этого уже достаточно.',
    19.         'Скорпионы' => 'все бонусы этого дня будут поджидать вас вечером.',
    20.         'Стрельцы' => 'наслаждайтесь моментом, а о будущем вы ещё успеете подумать.',
    21.         'Козероги' => 'соблюдайте сегодня максимально дружелюбный вид.',
    22.         'Водолеи' => 'впечатлений, полученых сегодня вам хватит надолго.',
    23.         'Рыбы' => 'звёзды дают зелёный свет на новые знакомства.',
    24.     ];
    25.  
    26. if (isset($_GET['birthday'])) {
    27.     if ($_GET['birthday'] === '') {
    28.         echo 'Вы не выбрали дату рождения!';
    29.     } else {
    30.  
    31.         $currentYear = date('Y');
    32.  
    33.         // Порядковый номер дня рождения в году
    34.         $birthday = (int)date('z', strtotime($_GET['birthday'])) + 1;
    35.  
    36.         switch ($birthday) {
    37.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 3, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 4, 19, $currentYear))):
    38.                 echo "Овны: $horoscopes[Овны]";
    39.                 break;
    40.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 4, 20, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 5, 20, $currentYear))):
    41.                 echo "Тельцы: $horoscopes[Тельцы]";
    42.                 break;
    43.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 5, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 6, 20, $currentYear))):
    44.                 echo "Близнецы: $horoscopes[Близнецы]";
    45.                 break;
    46.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 6, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 7, 22, $currentYear))):
    47.                 echo "Раки: $horoscopes[Раки]";
    48.                 break;
    49.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 7, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 8, 22, $currentYear))):
    50.                 echo "Львы: $horoscopes[Львы]";
    51.                 break;
    52.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 8, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 9, 22, $currentYear))):
    53.                 echo "Девы: $horoscopes[Девы]";
    54.                 break;
    55.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 9, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 10, 22, $currentYear))):
    56.                 echo "Весы: $horoscopes[Весы]";
    57.                 break;
    58.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 10, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 11, 21, $currentYear))):
    59.                 echo "Скорпионы: $horoscopes[Скорпионы]";
    60.                 break;
    61.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 11, 22, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 12, 21, $currentYear))):
    62.                 echo "Стрельцы: $horoscopes[Стрельцы]";
    63.                 break;
    64.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 12, 22, $currentYear)) || $birthday <= (int)date('z', mktime(0, 0, 0, 1, 19, $currentYear))):
    65.                 echo "Козероги: $horoscopes[Козероги]";
    66.                 break;
    67.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 1, 20, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 2, 18, $currentYear))):
    68.                 echo "Водолеи: $horoscopes[Водолеи]";
    69.                 break;
    70.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 2, 19, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 3, 20, $currentYear))):
    71.                 echo "Рыбы: $horoscopes[Рыбы]";
    72.                 break;
    73.         }
    74.     }
    75. }
    У Козерога указаны даты с 22 декабря до 19 января. Но 19 января почему-то выводится гороскоп для водолея.
    У Водолея с 20 января по 18 февраля. Но 18 февраля уже выводится гороскоп для Рыб.
    Получается что в январе и феврале дни смещены.
     
  2. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Проблема здесь в том, как интерпретируются диапазоны дней для знаков, которые пересекают начало и конец года, как у Козерога и Водолея. В этих случаях сравнение дней в году (z — порядковый номер дня) требует особого подхода, потому что date('z') для 19 января (примерно 19-й день в году) будет меньше, чем для 31 декабря (примерно 365-й день).

    Чтобы правильно интерпретировать такие знаки, стоит сделать отдельные условия для знаков, диапазон которых включает конец года или начало нового. Можно, например, использовать дополнительные проверки для таких случаев, либо упростить код с учетом таких границ.

    Обновим условие для Козерога и Водолея, а также добавим проверку для тех, кто родился на пограничных датах:


    PHP:
    1. <?php
    2. // ...
    3.  
    4. if (isset($_GET['birthday'])) {
    5.     if ($_GET['birthday'] === '') {
    6.         echo 'Вы не выбрали дату рождения!';
    7.     } else {
    8.  
    9.         $currentYear = date('Y');
    10.         $birthday = (int)date('z', strtotime($_GET['birthday'])) + 1;
    11.  
    12.         switch (true) {
    13.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 3, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 4, 19, $currentYear))):
    14.                 echo "Овны: {$horoscopes['Овны']}";
    15.                 break;
    16.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 4, 20, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 5, 20, $currentYear))):
    17.                 echo "Тельцы: {$horoscopes['Тельцы']}";
    18.                 break;
    19.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 5, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 6, 20, $currentYear))):
    20.                 echo "Близнецы: {$horoscopes['Близнецы']}";
    21.                 break;
    22.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 6, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 7, 22, $currentYear))):
    23.                 echo "Раки: {$horoscopes['Раки']}";
    24.                 break;
    25.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 7, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 8, 22, $currentYear))):
    26.                 echo "Львы: {$horoscopes['Львы']}";
    27.                 break;
    28.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 8, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 9, 22, $currentYear))):
    29.                 echo "Девы: {$horoscopes['Девы']}";
    30.                 break;
    31.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 9, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 10, 22, $currentYear))):
    32.                 echo "Весы: {$horoscopes['Весы']}";
    33.                 break;
    34.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 10, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 11, 21, $currentYear))):
    35.                 echo "Скорпионы: {$horoscopes['Скорпионы']}";
    36.                 break;
    37.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 11, 22, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 12, 21, $currentYear))):
    38.                 echo "Стрельцы: {$horoscopes['Стрельцы']}";
    39.                 break;
    40.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 12, 22, $currentYear)) || $birthday <= (int)date('z', mktime(0, 0, 0, 1, 19, $currentYear))):
    41.                 echo "Козероги: {$horoscopes['Козероги']}";
    42.                 break;
    43.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 1, 20, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 2, 18, $currentYear))):
    44.                 echo "Водолеи: {$horoscopes['Водолеи']}";
    45.                 break;
    46.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 2, 19, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 3, 20, $currentYear))):
    47.                 echo "Рыбы: {$horoscopes['Рыбы']}";
    48.                 break;
    49.         }
    50.     }
    51. }
    В этом варианте знак Козерога определяется корректно: сначала проверяется, попадает ли день в диапазон с 22 декабря по 31 декабря, либо с 1 по 19 января. Водолей тоже определяется корректно.


    Ввот основные изменения:

    1. Замена условий на switch (true): Вместо switch ($birthday), используется switch (true), что позволяет делать проверки с логическими выражениями (условиями) внутри каждого case, а не только на равенство значений.

    2. Корректировка условий для Козерога и Водолея:

      • В случае Козерога: проверяется, находится ли день рождения в диапазоне с 22 декабря по 31 декабря или с 1 по 19 января:
    PHP:
    1. case ($birthday >= (int)date('z', mktime(0, 0, 0, 12, 22, $currentYear)) || $birthday <= (int)date('z', mktime(0, 0, 0, 1, 19, $currentYear))):
    2.     echo "Козероги: {$horoscopes['Козероги']}";
    3.     break;
    Здесь используется оператор || (логическое ИЛИ), чтобы охватить оба периода (конец и начало года).

    В случае Водолея: знак определяется, если день рождения находится в интервале с 20 января по 18 февраля. Так как даты не пересекают границы года, условие для Водолея остается стандартным:

    PHP:
    1. case ($birthday >= (int)date('z', mktime(0, 0, 0, 1, 20, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 2, 18, $currentYear))):
    2.     echo "Водолеи: {$horoscopes['Водолеи']}";
    3.     break;
    Эти изменения позволяют правильно интерпретировать дни рождения, которые лежат на границе года, как в случае с Козерогом и Водолеем.
    --- Добавлено ---
    Замена switch ($birthday) на switch (true) — это ключевое изменение. Оно позволяет проверять логические выражения внутри каждого case, а не только точное соответствие значению переменной $birthday.

    В итоге, весь блок switch начинает работать как цепочка if...else if, что позволяет корректно обрабатывать диапазоны дат и решает проблему с Козерогом и Водолеем.
     
    #2 Dimon2x, 27 окт 2024
    Последнее редактирование: 27 окт 2024
  3. Bonso

    Bonso Новичок

    С нами с:
    18 янв 2024
    Сообщения:
    10
    Симпатии:
    0
    Ты проверял? У тебя правильно работает?
    Я скопировал твой код и у меня как показывал водолея с 19 января, так и показывает.
    В моем коде у козерога тоже стоит логическое || ИЛИ.
     
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    425
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    Посмотрите моё решение.
    Оставил, то что было для сравнения результата.
    Выберите какое понравится.
    PHP:
    1. <?php
    2. // №11
    3. echo '<form action="" method="GET">';
    4. echo '<input type="date" name="birthday" required >';
    5. echo '<input type="submit" value="отправить">';
    6. echo '</form>';
    7. $horoscopes =
    8.     [
    9.         'Овны' => 'найдите в себе желание радоваться этой жизни, даже если не очень хочется.',
    10.         'Тельцы' => 'сегодня даже работа ответит вам взаимностью.',
    11.         'Близнецы' => 'умерьте аппетиты и не выходите за рамки разумного.',
    12.         'Раки' => 'вы в отличной физической форме и преодолеете все препятствия.',
    13.         'Львы' => 'у вас есть тактика, вот её и придерживайтесь.',
    14.         'Девы' => 'кто-то захочет совершить нападение на ваше сердце.',
    15.         'Весы' => 'настроение будет на высоте, а этого уже достаточно.',
    16.         'Скорпионы' => 'все бонусы этого дня будут поджидать вас вечером.',
    17.         'Стрельцы' => 'наслаждайтесь моментом, а о будущем вы ещё успеете подумать.',
    18.         'Козероги' => 'соблюдайте сегодня максимально дружелюбный вид.',
    19.         'Водолеи' => 'впечатлений, полученых сегодня вам хватит надолго.',
    20.         'Рыбы' => 'звёзды дают зелёный свет на новые знакомства.',
    21.     ];
    22.  
    23.    $horoscopesInd = array_keys($horoscopes);
    24.  
    25. $horoscopesDate =
    26. [
    27.     ["3-21","4-19"],
    28.     ["4-20","5-20"],
    29.     ["5-21","6-20"],
    30.     ["6-21","7-22"],
    31.     ["7-23","8-22"],
    32.     ["8-23","9-22"],
    33.     ["9-23","10-22"],
    34.     ["10-23","11-21"],
    35.     ["11-22","12-21"],
    36.     ["12-22","1-19"],
    37.     ["1-20","2-18"],
    38.     ["2-19","3-20"]
    39. ];
    40.  
    41. function getTs($md, $Y){
    42.  
    43.     $md = str_pad($md, 4, "0", STR_PAD_LEFT);
    44.     return strtotime("$Y-$md");
    45. }
    46. if (isset($_GET['birthday'])) {
    47.     $currentYear = $Y = date('Y');
    48.     $mdBd = substr($_GET['birthday'], 5);
    49.  
    50.     foreach($horoscopesDate as $i => $interval)
    51.     {
    52.         $begin = getTs($interval[0], $Y);
    53.         $tsBd = getTs($mdBd, $Y);
    54.         if($i==9) $Y++;
    55.         $end = getTs($interval[1], $Y);
    56.         if(in_array($tsBd, range($begin,$end)))
    57.         {
    58.             echo $interval[0]," ", $interval[1],"<br>";
    59.             $zName = $horoscopesInd[$i];
    60.             echo $zName, " ", $horoscopes[$zName];
    61.             break;
    62.         }
    63.     }
    64. #########################################################################
    65. # Для сранения резeльтата оcтавил Ваш код
    66. echo "<hr>";
    67.  
    68. $currentYear = date('Y');
    69.         $birthday = (int)date('z', strtotime($_GET['birthday'])) + 1;
    70.  
    71.         switch (true) {
    72.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 3, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 4, 19, $currentYear))):
    73.                 echo "Овны: {$horoscopes['Овны']}";
    74.                 break;
    75.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 4, 20, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 5, 20, $currentYear))):
    76.                 echo "Тельцы: {$horoscopes['Тельцы']}";
    77.                 break;
    78.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 5, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 6, 20, $currentYear))):
    79.                 echo "Близнецы: {$horoscopes['Близнецы']}";
    80.                 break;
    81.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 6, 21, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 7, 22, $currentYear))):
    82.                 echo "Раки: {$horoscopes['Раки']}";
    83.                 break;
    84.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 7, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 8, 22, $currentYear))):
    85.                 echo "Львы: {$horoscopes['Львы']}";
    86.                 break;
    87.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 8, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 9, 22, $currentYear))):
    88.                 echo "Девы: {$horoscopes['Девы']}";
    89.                 break;
    90.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 9, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 10, 22, $currentYear))):
    91.                 echo "Весы: {$horoscopes['Весы']}";
    92.                 break;
    93.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 10, 23, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 11, 21, $currentYear))):
    94.                 echo "Скорпионы: {$horoscopes['Скорпионы']}";
    95.                 break;
    96.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 11, 22, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 12, 21, $currentYear))):
    97.                 echo "Стрельцы: {$horoscopes['Стрельцы']}";
    98.                 break;
    99.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 12, 22, $currentYear)) || $birthday <= (int)date('z', mktime(0, 0, 0, 1, 19, $currentYear))):
    100.                 echo "Козероги: {$horoscopes['Козероги']}";
    101.                 break;
    102.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 1, 20, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 2, 18, $currentYear))):
    103.                 echo "Водолеи: {$horoscopes['Водолеи']}";
    104.                 break;
    105.             case ($birthday >= (int)date('z', mktime(0, 0, 0, 2, 19, $currentYear)) && $birthday <= (int)date('z', mktime(0, 0, 0, 3, 20, $currentYear))):
    106.                 echo "Рыбы: {$horoscopes['Рыбы']}";
    107.                 break;
    108.         }
    109. ################################################################################
    110. }
    Удачи!
     
    artoodetoo нравится это.
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.484
    Симпатии:
    281
    Ну, изначально вы сделали неверный выбор что с чем сравнивать. Порядковый номер дня в году с интервалом дат знаков Зодиака чисто логически неудобно.
    В PHP наиболее удобным является сравнение дат в Юникс формате
    Отсюда наиболее удобным будет привести даты интервалов и дня рождения к одному году, взяв например 1970

    Ну, тогда уже и моё. Вспомню, помнят ли ручки
    PHP:
    1. <?php
    2.  
    3. $birthday = '02-29'; // m-d
    4.  
    5.  
    6. function ret_udate($d)
    7. {
    8.         $date  = date_create('1970-'.$d);
    9.     return date_format($date, 'U');
    10. }
    11.  
    12. function ret_zodiac($bd)
    13. {
    14.     $ubd       = ret_udate($bd);
    15.     $horoscope = array (
    16.                         array ('Козероги',  '01-01', '01-19'),
    17.                         array ('Водолеи',   '01-20', '02-18'),
    18.                         array ('Рыбы',      '02-19', '03-20'),
    19.                         array ('Овны',      '03-21', '04-19'),
    20.                         array ('Тельцы',    '04-20', '05-20'),
    21.                         array ('Близнецы',  '05-21', '06-20'),
    22.                         array ('Раки',      '06-21', '07-22'),
    23.                         array ('Львы',      '07-23', '08-22'),
    24.                         array ('Девы',      '08-23', '09-22'),
    25.                         array ('Весы',      '09-23', '10-22'),
    26.                         array ('Скорпионы', '10-23', '11-21'),
    27.                         array ('Стрельцы',  '11-22', '12-21'),
    28.                         array ('Козероги',  '12-22', '12-31'),
    29.                         );
    30.  
    31.         foreach ($horoscope as $zodiac)
    32.     {
    33.             if(ret_udate($zodiac[1]) <= $ubd && $ubd <= ret_udate($zodiac[2]))
    34.             {
    35.                     return $zodiac[0];
    36.             }
    37.     }
    38. }
    39.  
    40. $zodiac_sign = ret_zodiac($birthday);
    41.  
    42. $horoscopes = array (
    43.                      'Овны'      => 'найдите в себе желание радоваться этой жизни, даже если не очень хочется.',
    44.                      'Тельцы'    => 'сегодня даже работа ответит вам взаимностью.',
    45.                      'Близнецы'  => 'умерьте аппетиты и не выходите за рамки разумного.',
    46.                      'Раки'      => 'вы в отличной физической форме и преодолеете все препятствия.',
    47.                      'Львы'      => 'у вас есть тактика, вот её и придерживайтесь.',
    48.                      'Девы'      => 'кто-то захочет совершить нападение на ваше сердце.',
    49.                      'Весы'      => 'настроение будет на высоте, а этого уже достаточно.',
    50.                      'Скорпионы' => 'все бонусы этого дня будут поджидать вас вечером.',
    51.                      'Стрельцы'  => 'наслаждайтесь моментом, а о будущем вы ещё успеете подумать.',
    52.                      'Козероги'  => 'соблюдайте сегодня максимально дружелюбный вид.',
    53.                      'Водолеи'   => 'впечатлений, полученых сегодня вам хватит надолго.',
    54.                      'Рыбы'      => 'звёзды дают зелёный свет на новые знакомства.'
    55.                      );
    56.  
    57. echo $zodiac_sign . ' : ' . $horoscopes[$zodiac_sign];
    58. ?>
     
  6. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    425
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!

    Всё ещё на PHP 5.3 ?
    Вы таже сравниваете не порядковый номер дня в году, а timestamp. Это правильное решение.
    Мне не понравилось, что Вы для того чтобы не прописовать логику
    повторили в массиве $horoscopes запись для 'Козероги' с разными датами.
    Это в данном случае лишнее Удачи!
     
    #6 Vladimir Kheifets, 31 окт 2024
    Последнее редактирование: 31 окт 2024
  7. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.484
    Симпатии:
    281
    Приводится к одному году.
    А с "прописыванием" к двум.
    Не везде
    Нет. Люблю жабоскриптеров побесить