На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Сравнение дат и времени , на ПХП
      Сабж.

      Например $date=28.07.2004
      $date2=29.07.2004

      Если сделать просто
      ExpandedWrap disabled
        if ($date < $date2) {
        echo "...";}
        else {echo "....";}

      То он ничего не сравнивает... В чём ошибка?
        Недоработка в "первом языке", разработанном специально для web-программирования. Могли бы и реализовать.
        Попробуй strcmp($date1, $date2) или перевести в unixtime
          Вот мой вариант:
          ExpandedWrap disabled
             
            function dateCmp($date1, $date2) {
            list($d, $m, $y) = explode('.', $date1);
            $t1 = $y + $m + $d;
            list($d, $m, $y) = explode('.', $date2);
            $t2 = $y + $m + $d;
            return ($t1 > $2);
            }
            Как перевести в unixtime и что это такое? :)
              Unixtime - это кол-во секунд прошедших начиная с 1 января 1970 года. Для перевода времени в unixtime есть ф-ция mktime() Вот инструкция по её использованию.
              Цитата
              mktime
              (PHP 3, PHP 4 , PHP 5)

              mktime -- Возвращает метку времени для заданной даты
              Description
              int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])


              Предепреждение: Обратите внимание на странный порядок аргументов, отличающийся от порядка аргументов стандартной функции Unix mktime() и делающий неудобной работу с необязательными аргументами. Часто при написании скриптов путают порядок аргументов, что приводит к ошибкам.

              Функция возвращает метку времени Unix, соответствующую дате и времени, заданным аргументами. Метка времени - это цело число, равное разнице в секундах между заданной датой/временем и началом Эпохи Unix (The Unix Epoch, 1 января 1970 г).

              Аргументы могут быть опущены в порядке справа налево. Опущенные аргументы считаются равными соответствующим компонентам локальной даты/времени.

              Аргумент is_dst может быть установлен в 1, если заданной дате соответствует летнее время, 0 в противном случае, или -1 (значение по умолчанию), если неизвестно, действует ли летнеее время на заданную дату. В последнем случае PHP пытается определить это самостоятельно. Это можно привести к неожиданному результату (который, тем не менее, не будет неверным).

              Замечание: Аргумент is_dst был добавлен в версии 3.0.10.

              Функцию mktime() удобно использовать для выполнения арифметических операций с датами, так как она вычисляет верные значения при некорректных аргументах. Например, в следующем примере каждая строка выведет "Jan-01-1998". Пример 1. Пример использования функции mktime()

              <?php
              echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));
              echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));
              echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
              echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));
              ?>

              Year может быть двух- или четырехзначным числом. Значения от 0 до 69 соответствуют 2000-2069, а 70-99 соответствуют 1970-1999 (в большинстве современных систем, где время представляется 32-битным целым со знаком, допустимыми являются значения year между 1901 и 2038).


              Windows: Ни одна из версий Windows не поддерживает отрицательные метки времени. Поэтому для Windows допустимыми являются значения year между 1970 и 2038.


              Последний день любого месяца можно вычислить как "нулевой" день следующего месяца. Оба приведенных ниже примера выведут "Последний день в феврале 2000 г: 29". Пример 2. Last day of next month

              <?php
              $lastday = mktime(0, 0, 0, 3, 0, 2000);
              echo strftime("Последний день в феврале 2000 г:: %d", $lastday);

              $lastday = mktime(0, 0, 0, 4, -31, 2000);
              echo strftime("Последний день в феврале 2000 г:: %d", $lastday);
              ?>



              Даты, в которых год, месяц и день равны 0, считаются неверными (иначе им бы соответствовала дата 30.11.1999, что, согласитесь, было бы довольно странно).

                А если создавать дату по типу
                ExpandedWrap disabled
                  $dt=date(\"Y.m.d\",mktime(28,07,2004));

                кажется, можно сравнивать. Могу ошибаться.
                  Цитата
                  Argentum, 28.07.04, 08:32
                  Могу ошибаться.


                  Кажется ошибся;) Для начала ты неправильно вызвал ф-цию mktime()
                  Для кого я тут ман выложил? :D
                  твой вариант можно использовать в таком виде
                  ExpandedWrap disabled
                     
                    $dt1=date("Ymd",mktime(0,0,0,7,28,2004));
                    $dt2=date("Ymd",mktime(0,0,0,7,29,2004));
                    if ($dt1 > $dt2) {
                    print('$dt1 > $dt2');
                    }
                    else {
                    print('$dt1 <= $dt2');
                    }
                    Верно =) Я пытался тут по памяти ;)

                    Память, кажется подвела... =)
                    Сообщение отредактировано: Argentum -
                      Цитата Rom@nych @ 28.07.04, 09:39
                      $dt1=date("Ymd",mktime(0,0,0,7,28,2004));

                      mktime(0,0,0,7,28,2004)
                      А возмоно сделать так? mktime(H,i,s,m,d,y)???

                      Добавлено в :
                      Возможно каряво написал, но как сделать так, чтобы он например $date=date("H:i:s:m:d:y") записывал в Unixtime? Чтобы то время которое сейчас он мог сравнить с тем которое хранится в базе тоже в Unixtime?
                        Если нужно просто текущий Unixtimestemp то юзай mktime() без параметров. Также ф-ция time() возвращает Unixtimestamp()
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0305 ]   [ 15 queries used ]   [ Generated: 28.04.24, 18:19 GMT ]