Мне нужно написать функцию с именем 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% правильно. Но где проблема с этим кодом? Пожалуйста, помогите мне!!!
$diff = strtotime($formatted_date).'-'.strtotime($date[2].'-01-01 00:00:00');
Изменить на
$diff = strtotime($formatted_date) - strtotime($date[2].'-01-01 00:00:00');
Вы сделали символ минус строкой вместо оператора.
Вы можете попробовать это так
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";
}
}
Лучшим подходом будет использование класса 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');
Проверь это.
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');