2014-09-15 3 views
0

"MM.DD.YYY"형식의 문자열 인 dateinstring이라는 단일 매개 변수를 사용하는 countDays라는 함수를 작성해야합니다. 실제 날짜 값을 나타냅니다. 이 함수는 dateInString에 지정된 연도의 시작부터 dateInString에 표시된 날짜까지의 일 수를 콘솔에 출력해야합니다. dateInString의 값이 유효하지 않은 경우이 함수는 "잘못된 형식"을 콘솔에 인쇄해야합니다. 나는 아래의 코드를 작성했습니다PHP 데이 카운트 함수 작성

:

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 % 정확합니다. 그러나이 코드의 문제점은 어디에 있습니까? 제발 도와주세요 !!!

답변

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

에 당신은 마이너스 기호 대신 문자열 연산자를했다.

+0

감사합니다. – user3395595

+0

지금 올바르게 작동합니까? 도움이 더 필요하십니까? – Rimble

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"; 
    } 

} 
0

을 시도 할 수 있습니다. 나는이 유효성 검사를 포함하지 않았지만 정규식을 사용하는 것이 좋습니다.

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