datediff — PHP функция date_diff не работает?

Рассмотрим эти две даты 2017/4/14, 2017/6/3

Использование date_diff в php дает мне это

  object(DateInterval)[6]
public 'y' => int 0
public 'm' => int 1
public 'd' => int 20
public 'h' => int 0
public 'i' => int 0
public 's' => int 0
public 'weekday' => int 0
public 'weekday_behavior' => int 0
public 'first_last_day_of' => int 0
public 'invert' => int 0
public 'days' => int 50
public 'special_type' => int 0
public 'special_amount' => int 0
public 'have_weekday_relative' => int 0
public 'have_special_relative' => int 0

У меня есть задача создания копии этой функции (в качестве задания). Но когда я запускаю эти даты через мой алгоритм, я получаю

object(stdClass)[4]
public 'years' => int 0
public 'months' => int 1
public 'days' => int 19
public 'total_days' => int 50
public 'invert' => int 0

И когда я вычисляю количество дней вручную (вручную), я все равно вижу это как 19 дополнительных дней. Я не ищу решение о назначении. Но, может быть, какой-то алгоритм или функция date_diff содержит некоторые ошибки, о которых я не знаю?

Для 200+ тестовых случаев мой алгоритм работает, для 7 других — нет, и это всегда дневная разница между моим решением и решением php.

0

Решение

Имейте в виду, что месяц не является фиксированным числом дней, поэтому будет зависеть, какой вы впитаете этот «1 месяц».

Если вы начнете с 2017/4/14 и сначала займете полные месяцы, вы получите:

  • 4/14 -> 5/14: 1 месяц (30 дней)
  • 5/14 -> 6/3: 20 дней

Хотя, если вы начнете с 2017/6/3 и вернетесь назад, вы получите:

  • 6/3 -> 5/3: 1 месяц (31 день)
  • 5/3 -> 4/14: 19 дней

Так что это будет зависеть от метода, который вы используете.

Короче date_diff здесь не нарушается, и, возможно, ваш алгоритм не таков — даты — это просто забавные вещи для работы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector