вычисление количества дней с использованием strtotime возвращает неверный результат - PullRequest
1 голос
/ 20 сентября 2010

У меня есть две даты, хранящиеся в базе данных MySQL (тип = дата). Например -

Дата 1 = 2010-09-20
Дата 2 = 2010-10-20

Я хочу рассчитать количество дней между этими двумя датами. Так попробовал это -

$number_days = (strtotime($date2) - strtotime($date1) / (60 * 60 * 24));

Но это возвращает 49

Как так?

------------------------------------- ОБНОВЛЕНИЕ --------- ---------------------------------

Хорошо, я понял мою проблему, которая вызывала некоторую путаницу. Я использовал другую функцию для получения даты 1, и по разным причинам эта дата не возвращалась правильно, поэтому указанное количество дней было действительно правильным. Когда я получил правильную дату из базы данных, мои вычисления, приведенные выше, сработали, учитывая приоритет / over -

спасибо за ваши ответы.

Ответы [ 3 ]

16 голосов
/ 20 сентября 2010

/ имеет более высокое значение precedence, чем -

Так что (a - b / c) будет рассматриваться как ( a - (b/c) ), но вам нужно ( (a - b) / c )

Так попробуйте:

$number_days = (strtotime($date2) - strtotime($date1))  / (60 * 60 * 24);
1 голос
/ 20 сентября 2010

Если вы извлекаете обе даты из базы данных MySQL, мне всегда было проще преобразовать их в целочисленный формат UnixDateTime во время запроса SQL. С ними гораздо проще работать в этом формате.

Ваш запрос будет выглядеть примерно так:

SELECT *, UNIX_TIMESTAMP(date1) date1_u, UNIX_TIMESTAMP(date2) as date2_u from mytable

Я всегда считал, что гораздо лучше сделать это, чем получать даты в виде строк, а затем связываться с неуклюжими функциями обработки даты в PHP.

Тем не менее, класс даты намного лучше в PHP5.3 - он даже имеет функции добавления / вычитания даты, которые также решат вашу проблему намного лучше, чем strtotime () ... при условии, что вы используете PHP 5.3.

Надеюсь, это поможет. Я знаю, что это не дает прямого ответа на вопрос!

1 голос
/ 20 сентября 2010

Вы можете сделать это с помощью MySql запроса

SELECT (TO_DAYS( date1 ) - TO_DAYS( date2 )) as difference FROM MyTable

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_to-days

...