PHP日计数函数编写

时间:2014-09-15 10:02:55

标签: php reference phpmyadmin

我需要编写一个名为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%正确。但这段代码的问题在哪里?请帮帮我!!!

4 个答案:

答案 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');