development

MySQL에서 datetime에 삽입 할 때 PHP date () 형식

big-blog 2020. 3. 17. 23:40
반응형

MySQL에서 datetime에 삽입 할 때 PHP date () 형식


date()결과를 MySQL datetime유형 열에 삽입하려는 경우 PHP 에서 함수에 전달할 올바른 형식은 무엇입니까 ?

노력하고 date("Y-M-D G:i:s")있지만 매번 "0000-00-00 00:00:00"을 삽입합니다.


문제는 당신이 사용하고 있다는 것입니다 'M''D'MySQL은 형식의 숫자 표현을 기대하고, 텍스트 표현을있는,2010-02-06 19:30:13

시도 : date("Y-m-d H:i:s")이것은 동등한 숫자를 사용합니다.

편집 : 전환 GH는 영향이 없을 수 있지만, 당신은 아마 선도적 인 0과 24 시간 형식을 사용하려면,.


PHP date()매뉴얼 페이지 의 의견에서 :

<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>

당신은 'Y'정답을 가졌습니다. 그것은 1 년입니다. 그러나 'M'은 3 문자 달이고, 'm'은 2 자리 달입니다. 'd'대신 'D'와 동일한 문제입니다. 'G'는 1 또는 2 자리 시간으로, 'H'는 필요할 때 항상 선행 0을 갖습니다.


대안 해결책은 다음과 같습니다. PHP에서 날짜를 타임 스탬프로 사용하는 경우 PHP를 사용하여 날짜를 처리하지 않고 FROM_UNIXTIME함수 를 사용하여 DB에서 변환을 처리하도록 합니다.

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)

mysql> select * from a_table;

+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+

다음 PHP 코드를 사용하여 MySQL DATETIME 열에 삽입하는 변수를 만듭니다.

$datetime = date_create()->format('Y-m-d H:i:s');

서버의 현재 날짜 및 시간이 유지됩니다.


$date_old = '23-5-2016 23:15:23'; 
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));

//Format should be like 'Y-m-d H:i:s'`enter code here`

시간 소인을 MySQL DATETIME 컬럼으로 형식화하십시오.

strftime('%Y-%m-%d %H:%M:%S',$timestamp);

PHP로 MySQL 날짜 / 시간 형식

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";

이 기능을 사용합니다 (PHP 7)

function getDateForDatabase(string $date): string {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

이전 버전의 PHP (PHP <7)

function getDateForDatabase($date) {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

타임 스탬프를 사용하지 않으면 PHP의 date () 메소드를 사용할 필요가 없습니다. 경우 dateposted날짜 시간 열이, 당신은 다음과 같이 현재 날짜를 삽입 할 수 있습니다 :

$db->query("INSERT INTO table (dateposted) VALUES (now())");

이것은 간단한 대답을 찾고 나를 화나게했습니다. 마지막으로 모든 입력을 포착하고 정확하거나 적어도 유효하고 확인할 수있는 좋은 SQL 문자열을 제공하는 것처럼 보이는이 기능을 만들었습니다. 1999-12-31이면 아마도 잘못된 것이지만 MySQL에서는 나쁜 오류가 발생하지 않습니다.

function MakeSQLDate($date) {
    if (is_null($date)) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    }

    if (($t = strtotime($date)) === false) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    } else {
        return date('Y-m-d H:i:s', strtotime($date));
    }
}

DateTimePHP7 +에서 클래스 사용하기 :

function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
    $dt = new DateTime();
    $dt->setTimezone(new DateTimeZone('UTC'));
    $dt->setDate($year, $month, $day);
    $dt->setTime(0, 0, 0, 0); // set tine to midnight

    return $dt->format("Y-m-d H:i:s");
}

수락 된 답변에 대한 작은 부록 : 데이터베이스 datetime가 UTC로 저장되면 (항상 내가하는 일) gmdate("Y-m-d H:i:s")대신 대신 사용해야 합니다 date("Y-m-d H:i:s").

또는 MySQL이 모든 것을 처리하게하려면 일부 답변에서 알 수 있듯이 MySQL UTC_TIMESTAMP과 동일한 결과를 삽입 합니다.

참고 : 나는 현재 시간에 관한 질문을 이해했습니다.


보다 정확한 방법입니다. 더 정확한 정밀도를 제공하기 위해 초 뒤에 소수점을 배치합니다.

$now = date('Y-m-d\TH:i:s.uP', time());

를 확인하십시오 .uP.

자세한 정보 : https://stackoverflow.com/a/6153162/8662476

참고 URL : https://stackoverflow.com/questions/2215354/php-date-format-when-inserting-into-datetime-in-mysql

반응형