За последние 24 часа нас посетили 36739 программистов и 1708 роботов. Сейчас ищут 1187 программистов ...

timestamp

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

  1. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    Ребятки есть задание:
    8. Пользователь в форму вводит дату. Узнайте какой день недели был 100 лет назад
    есть решение:
    PHP:
    1. if(empty($piecesDATA1)) {
    2.     echo "Данные еще ввели";
    3. }
    4. else {
    5.     $q = mktime(0,0,0, $piecesDATA1[1], $piecesDATA1[2], $piecesDATA1[0]); // Входящая дата
    6.     $w = 3153600000+2160000;  // 100 лет на секунды + 25 дней компенсации высокостного года
    7.     $e = $q - $w;
    8.     echo date('l',$e) . '<br>'; // день недели
    9.     echo date('Y-m-d',$e); // год минус 100 лет назад
    10. }
    оно меня как бы устраивает с учетом тех инструментов которыми мне можно пользоваться (это ДЗ с курсов), но вот проблема, если я ввиду дату в период с 2001 по 2039 года, все нормально высчитывается, а если ввести например < 1999 или 2040 >, то уже не работает по причине того что mktime выдает странные данные не такие как мне нужно, а нужно мне вот такие "1487797200" -десятизначное число на 148, если задать дату "<= 1999" или "2040 =>" gjzdkz.ncmz 8-9 значные цифры изза которых конечный timestamp выдает не правильный результат
    1 почему так происходит?
    2. какие варианты правки задания, инструменты для использования только стандартные функции mktime
    time date strtotime не каких объектов или того что мы не проходили...
     
    #1 Taktreba, 24 фев 2017
    Последнее редактирование модератором: 24 фев 2017
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    mktime вернёт время unix в секундах, https://ru.wikipedia.org/wiki/UNIX-время
    так что 100 лет посчитать сложновато используя эти секунды, они в 32 или 64 битные должны быть, тогда диапазон возрастает.
    Для точных вычислений в PHP есть библиотеки, https://secure.php.net/manual/ru/book.bc.php https://secure.php.net/manual/ru/book.gmp.php
    ещё посмотри какой максимальное int число тебе доступно PHP_INT_MAX. https://secure.php.net/manual/ru/language.types.integer.php

    Это можно использовать?
    strtotime тут можно просто написать -100 years
    --- Добавлено ---
    PHP:
    1. var_export( date('l jS \of F Y h:i:s A', strtotime('-100 years')) );