我需要编写一个名为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 :(得分:2)
$diff = strtotime($formatted_date).'-'.strtotime($date[2].'-01-01 00:00:00');
更改为
$diff = strtotime($formatted_date) - strtotime($date[2].'-01-01 00:00:00');
您将减号符号设为字符串而不是运算符。
答案 1 :(得分:0)
你可以这样试试
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";
}
}
答案 2 :(得分: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');
答案 3 :(得分: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');