답변:
문제는 텍스트 표현 인 'M'
and를 사용 하고 'D'
있으며 MySQL은 형식의 숫자 표현을 기대하고 있다는 것입니다2010-02-06 19:30:13
시도 : date("Y-m-d H:i:s")
이것은 동등한 숫자를 사용합니다.
편집 : 전환 G
에 H
는 영향이 없을 수 있지만, 당신은 아마 선도적 인 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`
이 기능을 사용합니다 (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;
}
function getDateForDatabase(string $date) : string {
하는 function getDateForDatabase($date) {
이유 PHP에 충분한 지식이 없습니다.
타임 스탬프를 사용하지 않으면 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));
}
}
DateTime
PHP7 +에서 클래스 사용하기 :
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");
}
보다 정확한 방법입니다. 더 정확한 정밀도를 제공하기 위해 초 뒤에 소수점을 배치합니다.
$now = date('Y-m-d\TH:i:s.uP', time());
를 확인하십시오 .uP
.