За последние 24 часа нас посетили 22027 программистов и 988 роботов. Сейчас ищут 775 программистов ...

Формат даты/времени ISO-8061

Тема в разделе "Прочие вопросы по PHP", создана пользователем Solid, 28 дек 2019.

  1. Solid

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

    С нами с:
    7 май 2009
    Сообщения:
    7
    Симпатии:
    0
    Приветствую!

    Подскажите, как прибавлять/отнимать определенное количество часов от даты/времени в формате ISO-8061?
    Например, имеем: 2019-12-27T14:20:00.000Z
    Пока вот что:

    Код (Text):
    1. $time_ISO = '2019-12-27T14:20:00.000Z';
    2. echo('Дата и время ISO-8601     '.$time_ISO.'<br>');
    3. $time_ISO_preobraz_plus_UNIX = date('Y-m-d H:i:s:U:eO', strtotime($time_ISO));
    4. echo('Дата и время ISO-8601     '.$time_ISO_preobraz_plus_UNIX.'<br>');
    5. $time_UNIX = substr($time_ISO_preobraz_plus_UNIX, 20, 10);
    6. echo('Время UNIX     '.$time_UNIX.'<br>');
    Получаю:
    Дата и время ISO-8601 2019-12-27T14:20:00.000Z
    Дата и время ISO-8601 2019-12-27 14:20:00:1577456400:UTC+0000
    Время UNIX 1577456400

    Вопрос:
    Как к 2019-12-27T14:20:00.000Z прибавить, к примеру, 4 часа? (не строковыми же функциями)
    Как из UNIX Timestamp получить такое представление (2019-12-27T14:20:00.000Z)?

    Заранее спасибо!
     
  2. Solid

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

    С нами с:
    7 май 2009
    Сообщения:
    7
    Симпатии:
    0
    В общем, пока решил задачу таким образом:

    Код (Text):
    1. $poyas = 7;
    2. $ch_poyas = $poyas*3600; // количество секунд в часовом поясе
    3. $startTimeUTC7 = '2019-12-28T19:00:00.000Z'; // Исходное время, UTC+7, в формате ISO-8601
    4. echo('Исходное время, UTC+7, в формате ISO-8601    '.$startTimeUTC7.'<br>');
    5. $time_UNIX = date('U', strtotime($startTimeUTC7)) - $ch_poyas; // получение времени UNIX и приведение к 0 поясу
    6. echo('Время UNIX, UTC+0 '.$time_UNIX.'<br>');
    7. $startTime = date('Y-m-dTH:i:s.000Z', $time_UNIX);
    8. $search  = array('UTC', '0000');
    9. $replace = array('T', '000Z');
    10. echo('Время со сдвигом 7 часов, UTC+0, в формате ISO-8601 '.str_replace($search, $replace, $startTime).'<br>');
    Вывод на экран:

    Исходное время, UTC+7, в формате ISO-8601 2019-12-28T19:00:00.000Z
    Время UNIX, UTC+0 1577534400
    Время со сдвигом 7 часов, UTC+0, в формате ISO-8601 2019-12-28T12:00:00.000Z

    Может, кто подскажет более лаконичное (грамотное) решение?
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Solid, откройте для себя DateTime и сопутствующие классы.
     
    artoodetoo нравится это.