DateTime из массива затем вычесть из сейчас - PullRequest
0 голосов
/ 01 ноября 2019

Небольшой счетчик, который хранит общее и ежедневное значение с целью сброса каждый день. Tz уже установлен в другом месте (fyi).

Постоянные ошибки с вариациями DateTime:format и date и DateTime и strtotime ... похоже, ничего не работает. Должно быть очевидно, но, кажется, ничего не регистрируется. modify() выдается как ошибка при попытке печати, но кажется, что вычитающая часть не работает с самого начала.

$count_get = 'dir/count.txt';
$count = file($count_get, FILE_IGNORE_NEW_LINES);
$count_total  = $count[0];
$count_day    = $count[1];
$day_reset    = $count[2]; // 2019-10-31 00:00:00
$day_reset    = strtotime($day_reset);
$day_now      = date('Y-m-d H:i:s');
$count_dif    = strtotime($day_reset) - strtotime($day_now);
if ($count_dif > 86400) {
    $count_day = 1;
    $day_reset = $day_reset->modify('+1 day');
} else {
    $count_day = $count_day + 1;
}
$count_total = $count_total + 1;
$write_count = $count_total . "\n" . $count_day . "\n" . $day_reset;
$open_count = fopen($count_get, 'w') or die("Error");
fwrite($open_count, $write_count);
fclose($open_count);

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Решили сократить время Unix, чтобы еще больше упростить его. Пока это работает:

  $count_get = 'count.txt';
  $count = file($count_get, FILE_IGNORE_NEW_LINES);
  $count_total  = $count[0];
  $count_day    = $count[1];
  $count_unix   = $count[2];
  $count_total += 1;
  $count_now = strtotime('now');  
  $count_dif = $count_now - $count_unix;
    if ($count_dif > 86400) {
      $count_day = 1;
      $count_unix = $count_unix + 86400;
    } else {
      $count_day += 1;
    }
  $count_write = $count_total . "\n" . $count_day . "\n" . $count_unix;  
  $count_open = fopen($count_get, 'w') or die("Error");
  fwrite($count_open, $count_write);
  fclose($count_open);
0 голосов
/ 01 ноября 2019

Вы используете strtotime() два раза, и для целого числа функция возвращает false (которая преобразуется в 0), а strtotime() возвращает целое число, поэтому вы не можете использовать метод объекта для него.

Вот пример кода, который делает трюк с классом DateTime:

// current date
$now = new DateTime(); 

// if current date > threshold, reset the daily counter
$threshold = DateTime::createFromFormat('Y-m-d H:i:s', $day_reset);
$threshold->add(new DateInterval('P1D')); // reset date + 1 day

if($now > $threshold)
{
    $count_day = 1 ;
    $day_reset = $threshold->format('Y-m-d H:i:s'); // update day reset
}
else
{
    $count_day += 1 ;
}
...