Я хочу рассчитать дату на основе метки времени и некоторых других сведений.Почему дата дает мне неправильную дату?
Моя функция выглядит следующим образом:
function getLastDeliveryDate($timestamp,$endOfMonth=true,$extraMonth=0){
$days = 0;
$extraDays = 0;
$endOfCurrentMonth = 0;
$tsDay = 86400;
if($endOfMonth){
$endOfCurrentMonth = date("t", $timestamp) - date("d",$timestamp);
//rest of days in current month. In this sample 16 days
}
for($i=0;$i<$extraMonth;$i++){
$x = $i + 1;
$date = new DateTime(date("Y-m-d", $timestamp)); //create dateobject to add a month
$date->modify("+{$x} month"); // add the month (next month)
$extraDays += date("t", strtotime($date->format("Y-m-d")));
// get the days of the selected month and add them to count
// in this case its 31 + 30 + 31 = 92
}
$days = $endOfCurrentMonth + $extraDays;
// count everything together 16 + 92 = 108 days
return date("d.m.y", $timestamp + ($tsDay*$days));
//returning date with 108 days added.
}
В качестве образца я вызываю функцию, как:
// the timestamp is 2015-07-15
echo getLastDeliveryDate(1436911200, true, 3);
// should return 2015-10-31
Но это возвращение 2015-10-30
и я не знаю, почему. Но 108 дней - 2015-10-31
. Что здесь происходит?
Если я называю
echo getLastDeliveryDate(1436911200, true, 2);
его правильно и дает мне 2015-09-30
На самом деле я всегда сразу хочу, в последний день месяца.
EDIT:
Wired, если я проверить это здесь: IDEONE все работает отлично. Im мой проект не :(
Проверить смещение временной зоны? – Mouser
Даже если у меня это уже в прошедшей метке? Угадайте, что это не потому, что базовая дата правильная ... и возвращенные дневные счета также правы. Так что этого не может быть .. дней все 24 часа даже в timbugtu: D – Dwza
вы действительно устанавливаете '$ endOfMonth' вручную? для чего это? существует механический и «простой» способ проверить, находится ли метка времени в последний день месяца ... – ITroubs