На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
  
    > Математические выражения и работа с дато , й на PHP
      Есть код, но он не работает. В переменной $seconds - время в секундах одной недели. $count - строк в файле. $file2 - файл базы.
      ExpandedWrap disabled
              $file2 = file("../catalog/$file");
              $count = count($file2);
              // 604800 - в неделе секунд
              if($count != 0){
               $seconds = "604800";
               $clear = 0;
               for($i=0;$i<$count;$i++){
                $ex = explode("|", $file2[$i]);
                $dt = explode(".", $ex[0]);
                $date1 = abs(mktime(trim(round(date("H"))), 0, 0, trim(round(date("d"))), trim(round(date("m"))), trim(round(date("Y")))) - date("U"));
                $date2 = abs(mktime(trim(round(date("H"))), 0, 0, trim(round(date("d"))), trim(round(date("m"))), trim(round(date("Y")))) - mktime(12, 0, 0, trim(round($dt[0])), trim(round($dt[1])), trim(round($dt[2]))));
                $date = abs(round(($date1 - $date2)));
                print "$date / ".($ex[2] * $seconds)."<br>";
                if($date > ($ex[2] * $seconds)){
                 //KillLine("../catalog/$file", $i);
                 $clear++;
                }
               }
               print "<tr><td align=center>Проверено: <big><b>$count</b></big> / Очищено: <big><b>$clear</b></big> / Итого: <big><b>".($count - $clear)."</b></big><br><br></td></tr>";
              }else{
               print "<tr><td align=center>Проверено: <big><b>0</b></big> / Очищено: <big><b>0</b></big> / Итого: <big><b>0</b></big><br><br></td></tr>";
              }

      База данных:
      ExpandedWrap disabled
        10.08.05|15:30|4||1.0.0|52|Магнитофон|
        09.08.05|15:30|4||1.0.0|52|Магнитофон|
        08.08.05|15:30|4||1.0.0|52|Магнитофон|
        07.08.05|15:30|4||1.0.0|52|Магнитофон|
        06.08.05|15:30|4||1.0.0|52|Магнитофон|
        05.08.05|15:30|4||1.0.0|52|Магнитофон|
        04.08.05|15:30|4||1.0.0|52|Магнитофон|
        03.08.05|15:30|4||1.0.0|52|Магнитофон|
        02.08.05|15:30|4||1.0.0|52|Магнитофон|
        01.08.05|15:30|4||1.0.0|52|Магнитофон|
        31.07.05|15:30|4||1.0.0|52|Магнитофон|
        30.07.05|15:30|4||1.0.0|52|Магнитофон|
        29.07.05|15:30|4||1.0.0|52|Магнитофон|
        28.07.05|15:30|4||1.0.0|52|Магнитофон|
        29.07.05|15:30|4||1.0.0|52|Магнитофон|
        26.07.05|15:30|4||1.0.0|52|Магнитофон|
        25.07.05|15:30|4||1.0.0|52|Магнитофон|
        24.07.05|15:30|4||1.0.0|52|Магнитофон|
        23.07.05|15:30|4||1.0.0|52|Магнитофон|
        22.07.05|15:30|4||1.0.0|52|Магнитофон|
        21.07.05|15:30|4||1.0.0|52|Магнитофон|
        20.07.05|15:30|4||1.0.0|52|Магнитофон|
        19.07.05|15:30|4||1.0.0|52|Магнитофон|
        18.07.05|15:30|4||1.0.0|52|Магнитофон|
        17.07.05|15:30|4||1.0.0|52|Магнитофон|
        15.07.05|15:30|4||1.0.0|52|Магнитофон|
        14.07.05|15:30|4||1.0.0|52|Магнитофон|
        13.07.05|15:30|4||1.0.0|52|Магнитофон|

      4 - кол-во недель. может быть 1, 2, 3, 4.
      Функция KillLine - удаляет строку.
      Нужно чтобы удалялось. Т.е. вызывая скрипт, должно проверяться, прошло время или нет.
      Если можете предложить другой вариант отсеивания - буду рад.

      Спасибо.
        Неверный подход к органиции "ручной базы". А что если таблица будет в пару мегабайт? И каждый раз разбирать на массив а потом собирать обратно? Это далается так:
        • Открываем наш filename.ext для чтения
        • Блокируем его (flock)
        • Создаем filename.ext.tmp для записи
        • Читаем filename.ext построчно (fgets)
        • Если дата в строке не в прошлом, записываем ее в filename.ext.tmp (fputs)
        • А если нет, то просто переходим к следующей итерации while
        • закрываем filename.ext.tmp
        • закрываем и разблокируем filename.ext
        • удаляем filename.ext и переименовываем filename.ext.tmp -> filename.ext
        Надеюсь, проверка даты работает верно?
          За идею спасибо, а вот проверку мне и надо .... :)
            ExpandedWrap disabled
              <?php
              $line = '29.07.05|15:30|4||1.0.0|52|Магнитофон|';
              $array = explode('|', $line);
              $date = explode('.', $array[0]);
              $time = explode(':', $array[1]);
              $current = time();
              $checking = mktime($time[0], $time[1], 0, $date[1], $date[0], $date[2]);
              echo ($current < $checking) ? 'В будущем' : 'В прошлом';
              ?>

            Ничего другого на ум не приходит.
              :no: Система другая. Посидев пару часов додумался примерно до следующего:
              ExpandedWrap disabled
                 $week = 604800;
                 $line = "29.07.04|sdf|sdf|ad|";
                 $ex = explode("|", $line);
                 $dt = explode(".", $ex[0]);
                 $date = mktime() - mktime(0, 0, 0, $dt[0], $dt[1], $dt[2]);
                 if($date < ($week * 4)){
                  прошло
                 }

              Вроде все удаляет, но 3 первые переменные (хоть они и меньше текущей даты) становятся отрицательными в переменной $date, и следовательно $ex[0] больше чем текущая дата.

              Вопрос на засыпку: Что за ГЛЮКИ!!!!!!?!?!?!?!??! :blink: :blink: :blink:
                http://detail.phpclub.ru/article/date_stuff

                Добавлено
                PS: и ещё. Не в каждой неделе 604800 секунд.
                  Цитата
                  PS: и ещё. Не в каждой неделе 604800 секунд.
                  Не принципиально важно, т.к. дата берется примерная.
                  За ссылку спасибо, посмотрю.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0245 ]   [ 15 queries used ]   [ Generated: 7.05.24, 13:49 GMT ]