За последние 24 часа нас посетили 18839 программистов и 1596 роботов. Сейчас ищут 1108 программистов ...

Дата с частичным сдвигом по часовому поясу О_о

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

  1. RastaCat

    RastaCat Новичок

    С нами с:
    12 фев 2024
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте. Никак не могу понять особенности механики работы gmdate().

    Код (Text):
    1.  
    2. $ddd = strtotime("10.02.2024 14:14:00") - strtotime("27.01.2024 05:20:00");
    3. $ttt = 24*60*60;
    4. $ttt += 5*60*60;
    5. $ttt += 6*60;
    6. $ttt += 10;
    7.  
    8. $new_date = gmdate("Y-m-d H:i:s", strtotime("11.02.2024 19:08:10") + $ddd + $ttt + 10800);
    9. $new_date2 = gmdate("Y-m-d H:i:s", strtotime("11.02.2024 19:08:10") + (($ddd + $ttt)*3 + 10800)/4);
    С учётом сдвига часового пояса на 3ч(10800сек) обе переменные $new_date, $new_date2 отображают правильные значения 2024-02-27 09:08:20 и 2024-02-23 09:23:17 . Однако не могу понять: по идее для new_date2 прибавка 3ч должна производиться целиком, а не частично. Как так?
     
  2. RastaCat

    RastaCat Новичок

    С нами с:
    12 фев 2024
    Сообщения:
    4
    Симпатии:
    0
    Похоже не правильно проверяю даты. На малых числах $new_date2 требует оформления как и $new_date:
    Код (Text):
    1. $new_date2 = gmdate("Y-m-d H:i:s", strtotime("11.02.2024 19:08:10") + ($ddd + $ttt)*3/4 + 10800);
     
  3. RastaCat

    RastaCat Новичок

    С нами с:
    12 фев 2024
    Сообщения:
    4
    Симпатии:
    0
    Даты перепроверены. И правда вышла ошибка из-за больших чисел. Тему можно не открывать/закрыть.
     
  4. RastaCat

    RastaCat Новичок

    С нами с:
    12 фев 2024
    Сообщения:
    4
    Симпатии:
    0
    Немного монолог...Извиняюсь за это. Долго не могла разобраться как даты эти проверить, т.к. считать вручную казалось сложным, а написать
    Код (Text):
    1. echo (strtotime($new_date2) - strtotime("11.02.2024 19:08:10"))/(strtotime($new_date) - strtotime("11.02.2024 19:08:10"));
    чтобы проверить соотношение не хватало ума.
     
  5. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    425
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    PHP 8 Ваш скрипт выдаёт ошибку
    Это непринципиално, т.к. без всей этой арифметики можно обойтись использую формат в
    strtotime или в методе modify класса DateTime, например, "+3 hours"
    PHP:
    1. $f1 = "Y-m-d H:i:s";
    2. $f2 = "+3 hours";
    3. $baseTime = strtotime("11.02.2024 19:08:10");
    4. $new_date = gmdate($f1, $baseTime);
    5. echo "$new_date<br>";
    6. $new_date = gmdate($f1, strtotime($f2, $baseTime));
    7. echo "$new_date<hr>";
    8. ################################################
    9. //Альтернатива
    10. $new_date = new DateTime("11.02.2024 19:08:10");
    11. $new_date -> setTimezone(new DateTimeZone('GMT'));
    12. echo $new_date -> format($f1),"<br>";
    13. echo $new_date ->  modify($f2) -> format($f1);
    Удачи!
     
    #5 Vladimir Kheifets, 14 фев 2024
    Последнее редактирование: 14 фев 2024