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")
이것은 동등한 숫자를 사용합니다.
편집 : 전환 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`
시간 소인을 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));
}
}
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");
}
수락 된 답변에 대한 작은 부록 : 데이터베이스 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
'development' 카테고리의 다른 글
파이썬에서 주 번호를 얻는 방법? (0) | 2020.03.18 |
---|---|
거부 됨 : 리소스에 대한 요청 된 액세스가 거부되었습니다. : docker (0) | 2020.03.17 |
Rails 4에서 참조 열 마이그레이션 추가 (0) | 2020.03.17 |
CSS를 사용하여 텍스트 숨기기 (0) | 2020.03.17 |
부동 소수점은 소수점 이하 두 자리 만 표시합니다 (0) | 2020.03.17 |