2016-12-28 6 views
4

날짜 시간에 MySQL의 타임 스탬프를 변환합니다.는 어떻게 <code>"timestamp"</code>라는 이름의 열, <code>timestamp</code>의 유형 및 <code>on update CURRENT_TIMESTAMP</code>의 속성과 <code>CURRENT_TIMESTAMP</code>의 기본값은 MySQL의 DB 테이블이 PHP

테이블에 레코드를 추가하고 타임 스탬프가 아닌 다른 값을 지정하면 타임 스탬프는 2016-12-28 17:02:26처럼 자동으로 추가됩니다.

는 PHP에서 나는 다음과 같은 쿼리를

SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC 

쿼리의 결과 $rows에 저장됩니다를 사용하여 테이블을 조회하고 나는 형식 다른 일부 값으로 배열을 만들 foreach를 사용합니다. 시간 형식을 영국 형식의 24 시간제 시간으로 지정하려고 시도하고 있습니다 : dd/mm/yy, HH:MM:SS.

나는 date()strftime() 기능을 모두 시도를 다음과 같이

$formatted_datetime = strftime("%d %m %y %H %M %S", $row["timestamp"]); 
$formatted_datetime = date("d/m/y, H:i:s", $row["timestamp"]); 

이러한 결과를 모두에게 다음과 같은 사항 및 01 01 70 00 33 36 같은 잘못 날짜 시간 인 출력 :

주의 사항 : /home/ubuntu/workspace/pset7/public/history.php 온라인 20에서 부적절한 숫자 값 발생

나는 PHP와 MySQL을 처음 접했고 지금까지 본 다른 질문이나 문서 중이 변환을 성공적으로 수행 한 적이 없다. 왜 strftime()이 제대로 작동하지 않는지 이해할 수 없으며이를 올바르게 수행하는 방법을 모르겠다.

+0

가능한 복제 [실제 날짜와 시간에 MySQL의 타임 스탬프를 변환?] (http://stackoverflow.com/questions/5547252/convert-mysql-timestamp-into-actual-date-and- 시간) – Tiger

+1

Sidenote : 제한 때문에 * TIMESTAMP를 사용하지 않습니다 : * "TIMESTAMP 데이터 유형은 날짜와 시간 부분을 모두 포함하는 값에 사용됩니다. TIMESTAMP의 범위는 '1970-01-01 00:00입니다 : 01 'UTC to **'2038-01-19 03:14:07 '** UTC.'* https://dev.mysql.com/doc/refman/5.5/en/datetime.html 'DATETIME' 사용 * "DATETIME 타입은 날짜와 시간 부분을 모두 포함하는 값에 사용되며 MySQL은 DATETIME 값을 'YYYY-MM-DD HH : MM : SS'형식으로 검색하여 표시합니다 지원되는 범위는 '1000-01-01 00 : 00:00 '~ **'9999-12-31 23:59:59 '. ** "* –

+0

@Tiger 거기에 선택된 솔루션은 ... 많이 좋아 보인다. 내 테이블의 타임 스탬프 열에 대해 다른 유형의 이점이 있습니까? – Toby

답변

4

이 OO (그리고 가장 유연한)이 작업을 수행 할 방법 DateTime 클래스를 사용하고 새로운 DateTime 개체를 인스턴스화하는 정적 createFromFormat 방법을 사용하는 트릭을 할 것입니다 다음

echo $new_datetime->format('d/m/y, H:i:s'); 
다음 $new_datetime 객체는 객체의 format 메서드를 호출하여 사용자가 원하는 임의의 문자열 표현을 생성하는

부팅 할 때 DateTime 개체를 사용 했으므로 이제는 시간대를 변경하거나 일을 추가하거나 비교 (다른 것보다 크거나 같음) 및 다양한 시간 계산 (몇 일/개월/기타 ... DateTime 사이).

DateTime : http://php.net/manual/en/class.datetime.php 자세히 알아보기 그것을 사랑해. 그것을 살아라.

1

일반적으로 MySQL 날짜 기록에서 YYYY-MM-DD HH:MM:SS (2016-12-20 18:36:14) 형식으로 시간을 절약하면 날짜 형식을 사용하여 원하는대로 쉽게 변환 할 수 있지만 입력 내용을 시간으로 먼저 변환해야합니다.

$new_datetime = DateTime::createFromFormat ("Y-m-d H:i:s", $row["timestamp"]); 

는 이제 사용할 수 있습니다

$formatted_datetime = date("d/m/y, H:i:s", strtotime($row["timestamp"])); 
+0

이을 downvoted 이유는 OO 방법을하지 않을 수 있지만, strtotime으로는 잘 작동합니다 확실하지 않음 MySQL 타임 스탬프 용. – Devon

0

은 내가 Carbon class와 문자열 그리고 당신이 당신이 원하는 방식으로 포맷 할 수 있습니다

$carbon = Carbon::instance('2016-12-28 17:02:26'); 

포맷 사용합니다.

+2

Carbon은 PHP DateTime API의 제 3 자 확장 기능입니다. – Devon

+0

@Devon 참이지만 유용합니다. 그것은 Laravel과 함께 제공됩니다. – Samuel

+0

예, 거의 매일 사용합니다. 이것이 왜 떨어졌는지 확실하지 않은 Carbon은 라이브러리를 사용하고자하는 사람들에게 훌륭한 솔루션입니다. +1은 균형을 복원합니다. – Devon

1

왜 MySQL을 만들지 않습니까? 그리고 dd/mm/yy가 아닌 mm/dd/yy를 정말로 원하십니까?

SELECT *, DATE_FORMAT(timestamp, '%m/%d/%y, %T') formatted_date FROM .... 

그런 다음 $ row [ 'formatted_date'] 형식의 날짜를 추출 할 수 있습니다.

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format를 참조

+0

와우, 맞습니다, 내가 원하는 DD/mm/yy, 감사합니다. 나는 fothwith를 편집 할 것이다! – Toby

+0

나는 DATE_FORMAT()을 언급했으나'SELECT DATE_FORMAT ... '과 관련해서 만 그것을 적응시키는 방법을 알지 못했다. 나는 그것을 시도해 보겠다. – Toby

+0

이것은 효과가 있으며 나는 그것의 깔끔함을 좋아하지만 Ray의 DateTime 객체 메소드가 좀 더 유연하다고 생각하십시오. – Toby