[php] 잘못된 형식의 숫자 값이 있습니다.

DB에 추가 할 PHP 스크립트에 두 개의 날짜 (시작 및 종료)를 전달하는 양식이 있습니다. 이것을 확인하는 데 문제가 있습니다. 다음과 같은 오류가 계속 발생합니다.

잘못된 형식의 숫자 값이 있습니다.

이것은 내가 다음을 사용할 때

date("d",$_GET['start_date']);

그러나 많은 사이트에서 권장하는대로 strtotime () 함수를 사용하면 1970 년 1 월 1 일의 유닉스 타임 스탬프 날짜가 표시됩니다. 정확한 날짜를 얻는 방법에 대한 아이디어가 있습니까?



답변

정수 여야하는 날짜 함수에 두 번째 인수로 문자열을 전달하기 때문입니다.

문자열 날짜 (문자열 $ format [, int $ timestamp = time ()])

영어 텍스트 날짜 / 시간 설명을 Unix 타임 스탬프 (정수) 로 구문 분석 하는 strtotime 을 사용해보십시오 .

date("d", strtotime($_GET['start_date']));


답변

단순히 strtotime()함수를 사용하여이 문제를 해결할 수 있습니다 .

date("d", strtotime($_GET['start_date']));


답변

$_GET['start_date']숫자가 아닙니다.하지만에서 지원하지 않는 날짜 형식 strtotime입니다. strtotime 에 대해 실행 가능한 형식으로 날짜를 다시 형식화 하거나 explode / mktime 조합을 사용해야 합니다.

현재 받고있는 형식을 게시하기에 충분히 친절하다면 예를 추가 할 수 있습니다.


답변

나는이 같은 상황에 부딪혔다 (내 경우에는 Drupal보기의 사용자 정의 PHP 필드에 날짜 값이 있음), 나를 위해 일한 것은 strtotime 대신 intval을 사용하여 값을 정수로 바꾸는 것이 었습니다. 기본적으로 타임 스탬프이기 때문입니다. 이지만 정수가 아닌 문자열 형식입니다. 분명히 모든 사람에게 해당되는 것은 아니지만 시도해 볼 가치가 있습니다.


답변

이 오류는 숫자 (영숫자)와 결합 된 문자를 사용하는 변수로 계산을 수행 할 때 발생합니다 (예 : 24kb, 886ab …

다음 기능에 오류가 있습니다.

function get_config_bytes($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    switch($last) {
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }
    return $this->fix_integer_overflow($val);
}

응용 프로그램이 이미지를 업로드하지만 작동하지 않고 다음 경고가 표시되었습니다.

여기에 이미지 설명 입력

솔루션 :intval()함수는 영숫자 데이터가있는 변수의 정수 값을 추출하고 동일한 값을 가진 새 변수를 생성하지만 intval()함수 를 사용하여 정수로 변환 합니다. 다음은 코드입니다.

function get_config_bytes($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    $intval = intval(trim($val));
    switch($last) {
        case 'g':
            $intval *= 1024;
        case 'm':
            $intval *= 1024;
        case 'k':
            $intval *= 1024;
    }
    return $this->fix_integer_overflow($intval);
}


답변

이것은 나를 많이 도왔습니다.

$new_date = date_format(date_create($old_date), 'Y-m-d');


답변

이것은 오래된 질문이지만이 메시지가 발생할 수있는 또 다른 미묘한 방법이 있습니다. 여기 문서에서 꽤 잘 설명 되어 있습니다.

이 scenerio를 상상해보십시오.

try {
  // code that triggers a pdo exception
} catch (Exception $e) {
  throw new MyCustomExceptionHandler($e);
}

그리고 MyCustomExceptionHandler대략 다음과 같이 정의됩니다.

class MyCustomExceptionHandler extends Exception {
  public function __construct($e) {
    parent::__construct($e->getMessage(), $e->getCode());
  }
}

Exception클래스가 생성자의 두 번째 매개 변수에 대한 숫자를 예상하고 있지만 PDOException의 반환 유형을 $e->getCode()문자열 로 동적으로 변경했을 수 있기 때문에 이것은 실제로 사용자 지정 예외 처리기에서 새 예외를 트리거 합니다.

이에 대한 해결 방법은 다음과 같은 사용자 지정 예외 처리기를 정의하는 것입니다.

class MyCustomExceptionHandler extends Exception {
  public function __construct($e) {
    parent::__construct($e->getMessage());
    $this->code = $e->getCode();
  }
}