Я пытаюсь получить разницу между двумя месяцами. Например, для ниже, я хотел бы 2 месяца.
$datetime1 = date_create('2017-03-01');
$datetime2 = date_create('2017-04-30');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%m months');
echo $interval->format('%d days');
Это дает мне 2 месяца и 1 день.
Я пытаюсь получить разницу между двумя месяцами. Например, для ниже, я хотел бы 2 месяца.
$datetime1 = date_create('2017-03-01');
$datetime2 = date_create('2017-04-30');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%m months');
echo $interval->format('%d days');
Это дает мне 2 месяца и 1 день.
Причина, по которой вы получаете неправильный результат, скорее всего, потому что вы не установили часовой пояс по умолчанию, один для «вашего» часового пояса.
В добавлении и например:
date_default_timezone_set('America/New_York');
вернул правильную разницу во времени, при этом не используя его, вернул то, что ты сейчас получаешь.
Используйте тот для своего собственного часового пояса, или установите это в своих системных файлах.
Из руководства http://php.net/manual/en/datetime.diff.php в разделе «Примечания, внесенные пользователем»:
«При использовании datediff убедитесь, что ваш часовой пояс правильный, для меня в 64-битной Windows 7 он вел себя очень странно, когда часовой пояс был неправильным (я сравнивал сейчас со временем в базе данных и метаданными exif на фотографиях). Например: date_default_timezone_set (‘Europe /Осло’);»
и пройдите остальную часть «Пользовательских заметок».
Соответствующая ссылка из комментариев, предоставленных RiggsFolly:
который может быть здесь.
Редактировать:
Заметив, что ОП принимает этот ответ, взятый из комментария RiggsFolly, он также должен был добавить:
date_default_timezone_set('UTC');
Я бы назвал это совместным предприятием, и я не могу взять на себя всю ответственность за это.