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
승인된 답변에 대한 작은 부록: 데이터베이스인 경우datetime
UTC(항상 하는 작업)로 저장됩니다.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
'programing' 카테고리의 다른 글
mysql: 인식할 수 없는 서비스 (0) | 2022.09.05 |
---|---|
Vue + vuex 개체 돌연변이 (0) | 2022.09.05 |
larabel 5의 스토리지 파사드를 사용하여 파일 URL을 알려주세요. (0) | 2022.09.05 |
JavaScript의 날짜 형식에 대한 문서는 어디서 찾을 수 있습니까? (0) | 2022.09.05 |
AngularJS에서 스코프 프로토타입/프로토타입 상속의 뉘앙스는 무엇입니까? (0) | 2022.09.05 |