У меня странная проблема, с которой я никогда не сталкивался с PHP до использования их функции strtotime().Нужна помощь для ошибок вычисления PHP strtotime()
$original = strtotime('2015-12-31 12:34:56');
$time = strtotime('+ 2 month', $original);
echo date('m/d/y H:i:s', $original),'<br>',date('m/d/y H:i:s', $time);
Что я ожидаю получить в качестве вывода:
12/31/15 12:34:56
02/29/16 12:34:56
То, что я на самом деле получить в качестве вывода:
12/31/15 12:34:56
03/02/16 12:34:56
Как я могу объяснить эту ошибку расчета? После довольно много исследований я понимаю, что PHP использует в среднем 30,5 дней для выполнения таких расчетов. Мне все равно, о чем «ПОЧЕМУ» это происходит, а скорее, что я могу сделать, чтобы объяснить это. У меня есть некоторые соображения, связанные с написанием обертки для strtotime() при использовании месячных вычислений, но это похоже на запутанный подход ...
Существует существующий ответ для this question, но компонент времени не указан в вопрос (только дата), поэтому я не рассматриваю этот вопрос как дубликат этого. Кроме того, я в основном стараюсь улучшить то, как мы справляемся с такой проблемой, а не обязательно решение, отправленное по вышеупомянутому вопросу. Если, однако, я ошибаюсь, то вы можете удалить этот вопрос :(
Поскольку месяц не является фиксированной длиной .... PHP не дает вам «последний день месяца через два месяца», он занимает произвольную длину месяца, которая будет работать в большинстве (но не всех) обстоятельствах .... если вы хотите, добавьте 2 месяца к первому дню месяца, затем запросите последнюю дату этого месяца –