php вычитание даты с использованием функции strtotime, не возвращающей правильную продолжительность времени - PullRequest
0 голосов
/ 09 августа 2011

Я конвертирую отчеты на основе PHP (v 5.2.17) в SSRS.

Я пытаюсь написать запрос, который вычитает даты, как это делает файл php.

Датарасчет либо точно совпадает, либо отличается ровно на 3600 секунд

  $timediff=strtotime(date("Y-m-d"))-strtotime("03/29/2007");
  print $timediff;  // 137635200 

  select (trunc(sysdate) - to_date('03/29/2007','MM/DD/YYYY'))*60*60*24 from dual
  -- returns 137635200 - matches


  $timediff=strtotime(date("Y-m-d"))-strtotime("11/23/2009");
  print $timediff;  // 53823600 

  select (trunc(sysdate) - to_date('11/23/2009','MM/DD/YYYY'))*60*60*24 from dual
  -- returns 53827200 - doesnt match - off by 3600

Я искал stackoverflow и нашел следующий пример, который звучит так (23.11.2009 - понедельник, и сегодня - 8/ 8, но это не отличается одинаково) PHP Strtotime ошибочная функция

Я предполагаю, что вычисление php неверно, а оракул верен.

Что скажете вы?; -)

Спасибо!

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Не видя точных значений, я подозреваю, что это потому, что одно из них настраивается на летнее время, а другое - нет. Большинство частей света переходят на летнее время в течение марта. Так что в вашем первом примере обе даты находятся в одном и том же смещении по Гринвичу, но во втором (ноябрь) они не совпадают.

Итак, одна из ваших платформ (возможно, Oracle) учитывает этот часовой сдвиг, а другая - нет.

1 голос
/ 09 августа 2011

3600 = час, так что может быть разница часовых поясов?

0 голосов
/ 09 августа 2011

53827200 = (623 * 60 * 60 * 24)

Итак, 53827200 - это ровно 623 дня из 24 часов.

53823600 - это 622,958333 дня или 622 дня (из 24 часов) плюс 23часов.

Оба права, для данного определения права.

...