programing

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

sourcetip 2022. 9. 5. 23:29
반응형

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

에 전달하기 위한 올바른 형식은 무엇입니까?date()결과를 MySQL에 삽입하려면 PHP에서 기능을 수행합니다.datetime입력란?

난 노력해왔다.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')숫자 등가 값을 사용합니다.

편집: 스위치G로.H영향이 없을 수도 있지만 선행0에 24시간 형식을 사용하는 것이 좋습니다.

php 매뉴얼 페이지의 코멘트:

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

Y는 1년 내내 맞췄지만 M은 3자 달인 반면 M은 두 자리 달입니다.'d' 대신 'D'에서도 같은 문제가 발생합니다. 'G'는 1 또는 2자리 시간이며, 여기서 'H'는 필요할 때 항상 선행 0을 가집니다.

여기 다른 해결책이 있습니다: 만약 당신이 타임스탬프로 PHP에 날짜를 가지고 있다면, 그것을 PHP로 처리하지 말고 DB가 그것을 처리하도록 하세요.FROM_UNIXTIME기능.

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`

이 기능을 사용합니다(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;
}

타임스탬프를 MySQL DATETIME 열로 포맷합니다.

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

MySQL datetime을 PHP로 포맷합니다.

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

타임스탬프를 사용하지 않으면 PHP에서 date() 메서드를 사용할 필요가 없습니다.한다면dateposted는 datetime 컬럼으로 다음과 같이 현재 날짜를 삽입할 수 있습니다.

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

사용.DateTime클래스(PHP7+):

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

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

간단한 답을 찾느라 미치겠어요.마지막으로 이 함수는 모든 입력을 잡아내고 정확하거나 적어도 유효하고 체크할 수 있는 좋은 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));
    }
}

이게 더 정확한 방법이에요.소수점 뒤에 소수점을 배치하여 정밀도를 높입니다.

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

주의:.uP.

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

승인된 답변에 대한 작은 부록: 데이터베이스인 경우datetimeUTC(항상 하는 작업)로 저장됩니다.gmdate('Y-m-d H:i:s')대신date("Y-m-d H:i:s").

또는 일부 답변에서 제안하는 것처럼 MySQL이 모든 것을 처리하도록 하고 싶다면 MySQL의UTC_TIMESTAMP 같은

주의: 현재 시간을 기준으로 질문을 이해했습니다.

IMO와 .date()이전 답변에서 제공된 기능 옵션은 데이터베이스와 다를 수 있는 서버 시간대 설정을 신중하게 고려해야 합니다. UTC 시간대가 필요합니다.gmdate())date()에 더 가 특정 경우에 더 편리할 것입니다.

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

반응형