ссылка — написание функции PHP Day count

Мне нужно написать функцию с именем countDays, которая принимает единственный параметр с именем dateinstring, который представляет собой строку в форме «MM.DD.YYY», представляющую значение реальной даты. Функция должна выводить на консоль количество дней с начала года, указанного в dateInString, до даты, представленной в dateInString. Если значение dateInString недопустимо, функция должна вывести «Bad format» на консоль.

Я написал код, как показано ниже:

    function countDays($dateInString){
date_default_timezone_set('America/Los_Angeles');
$date = explode('.', $dateInString);

if(count($date) == 3 && checkdate($date[0], $date[1], $date[2])){
$formatted_date = $date[2].'-'.$date[0].'-'.$date[1].'00:00:00';
$diff = strtotime($formatted_date).'-'.strtotime($date[2].'-01-01 00:00:00');
echo round($diff/86400)+1;
}
else {
echo 'Bad format';
}
};

countDays('1.15.2014');

Но приведенный выше код, кажется, не дает правильный вывод. Это примерно на 33% правильно. Но где проблема с этим кодом? Пожалуйста, помогите мне!!!

0

Решение

$diff = strtotime($formatted_date).'-'.strtotime($date[2].'-01-01 00:00:00');

Изменить на

$diff = strtotime($formatted_date) - strtotime($date[2].'-01-01 00:00:00');

Вы сделали символ минус строкой вместо оператора.

2

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

Вы можете попробовать это так

function countDays($dateInString) {
date_default_timezone_set('America/Los_Angeles');
$date = explode('.', $dateInString);

if (checkdate($date[0], $date[1], $date[2])) {
$year_start = mktime(0, 0, 0, 1, 1, $date[2]);
$your_date = mktime(0,0,0,$date[0], $date[1], $date[2]);
$diff = $your_date - $year_start;
echo floor($diff /(60*60*24));
} else {
echo "Bad date supplied";
}

}
0

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

function countDays($dateInString){
$parts = explode('.', $dateInString);

$date = new DateTime($parts[2] . '-' . $parts[0] . '-' . $parts[1]);

$compare = new DateTime( $date->format('Y') . '-01-01' );

$interval = $date->diff($compare);

return $interval->format('%a');
}

echo countDays('09.15.2014');
0

Проверь это.

function countDays($dateInString){
date_default_timezone_set('America/Los_Angeles');
$date = explode('.', $dateInString);

if(count($date) == 3 && checkdate($date[0], $date[1], $date[2])){
$formatted_date = strtotime($date[2].'/'.$date[0].'/'.$date[1]);
$endTimeStamp = strtotime("2014/01/01");
$timeDiff = abs($endTimeStamp - $formatted_date);
echo round(intval($timeDiff/86400));
}
else {
echo 'Bad format';
}
};

countDays('01.01.2014');
0
По вопросам рекламы [email protected]