2013-12-11 3 views
0

로 연결 필요와 날짜가 올바른 것 같습니다 (Y-m-d g:i:s으로 서식 됨).통과 trunc_date 포스트 그레스 타임 스탬프 내가 포스트 그레스에서 다음 SQL 쿼리를 사용하고 잘못된 날짜

그러나 PHP로 실행하면 날짜 대신 Postgres가 타임 스탬프를 반환합니다.

따라서 PHP date에서 해당 타임 스탬프를 사용하면 전체 날짜가 올바르지 않습니다. 예를 들어

:

포스트 그레스가로 표시되는 첫 번째 행 :

"2013-08-01 00:00:00, 36, 1"

하지만 PHP는 수신 :

을 :

"1375315200000, 36, 1"

내가해야 할 때

echo date("Y-m-d", 1375315200000);

출력은 : 나는, 아마도 패딩 문제라고 생각

45552-01-02

대신 처음에는

2013-08-01

의? 그래서 타임 스탬프의 마지막 세 개의 0을 떨어 :

echo date("Y-m-d", 1375315200);

것을 반환 :

내 질문에

2013-07-31은 다음과 같습니다

1) 그것은 단지 우연의 일치인가 후 그 3 개의 0을 버리면, 타임 스탬프는 데이터베이스에 저장된 실제 날짜보다 하루 앞입니다.

2) 왜 Postgres가 타임 스탬프를 올바르게 해석하는지; 반면 PHP는 그렇지 않습니까? 문서에 따르면 Postgres 타임 스탬프는 유닉스 타임 스탬프 형식이어야합니다.

+0

여기에 시간대 변환으로 의심되는 항목이 있습니다.서버에서'TimeZone'을'UTC'로 설정 했습니까? 서버 시간대가 변경됩니까? 해당 필드가'timestamp' 또는'time zone with time zone '타입입니까? –

+0

그게 문제 일 수 있다고 생각합니다. 데이터베이스가 아마존에 있는데, 나는 웹 서버가 애틀란타에있는 반면 시애틀에있는 시간대라고 생각합니다. 그런데 타임 스탬프에서 3 개의 0을 버려야하는 이유는 무엇입니까? Postgres의 타임 스탬프가 밀리 세컨드에 있기 때문입니까? 나는 그것이 유닉스 타임 스탬프와 같다고 생각했다. – ILikeTacos

+0

postgres가'2013-08-01 00 : 00 : 00'을 보내면 PHP가받는 것입니다. PHP가'1375315200000'을 받았다고 생각한다면, 약간의 코드, 이상적으로는 재현 가능한 테스트 케이스로 설명하십시오. –

답변

1

가 반환하고 수는 유닉스 시대에 밀리 초보다는 입니다. PHP로 보내기 전에 1000으로 나눠야합니다.

데이터베이스를 사용하는 경우 데이터베이스의 타임 스탬프가 실제로 UTC/GMT인지 또는 서버의 시간대로 오프셋되었는지주의해야합니다. 나는 둘 다 보았다. 캘리포니아에있는 내 서버는 Pacific Time for MySQL 타임 스탬프입니다. PHP 타임 스탬프를 데이터베이스에 집어 넣은 다음 SQL로 포맷하거나 그 반대로 조심하십시오.

+0

그럴 듯한데, PHP 코드를 date_default_timezone_set ($ databaseTimezone)으로 조정해야한다고 생각한다면, 맞습니까? 날짜를 올바르게 표시 할 수 있습니다. – ILikeTacos

+0

PHP는 정수 타임 스탬프 (현재 약 13 억)는 GMT/UTC라고 생각합니다. 가장 깨끗한 것은 아마도 GMT/UTC를 얻기 위해 DB 타임 스탬프에 몇 초를 더하거나 뺍니다. DB 서버가 일년 내내 표준 시간이 아닌 DST를 준수하는 경우 문제가 발생할 수 있습니다. –

관련 문제