2013-07-14 13 views
0

所以我一直在我的項目上做得非常好(Link to previous StackOverflow question),並且設法學到了很多東西,但有這個問題一直在跟我呆了幾天,我似乎無法解決它。只有SQL SELECT中的某些日期被設置爲「0」或「1969-12-31」 - UNIX_TIMESTAMP

它與使用UNIX_TIMESTAMP調用將SQL數據庫中的日期轉換爲UNIX時間格式有關,但出於某種原因,我的表中只有一組日期會給我提出問題!

==============

因此,這些都是我得到的值 -

#abridged here, see the results from the SELECT statement below to see the rest 
#of the fields outputted 

| firstVst | nextVst | DOB  | 
| 1206936000 | 1396238400 |   0 | 
| 1313726400 | 1313726400 | 278395200 | 
| 1318910400 | 1413604800 |   0 | 
| 1319083200 | 1413777600 |   0 | 

當我使用這個SELECT statment -

SELECT SQL_CALC_FOUND_ROWS *,UNIX_TIMESTAMP(firstVst) AS firstVst, 
UNIX_TIMESTAMP(nextVst) AS nextVst, UNIX_TIMESTAMP(DOB) AS DOB FROM people 
ORDER BY "ref DESC"; 

所以我最大的問題是:爲什麼在我的DOB中有3個被設置爲0(IE 12/31/1969在我的PC上)?爲什麼這不會發生在我的其他領域?


我可以看到數據相當不錯採用了更爲簡單的SELECT語句和DOB場看起來不錯......?

#formatting broken to change some variable names etc. 

select * FROM people; 

| ref | lastName | firstName | DOB  | rN | lN | firstVst | disp | repName  | nextVst | 
| 10001 | BlankA | NameA  | 1968-04-15 | 1000000 | 4600000 | 2008-03-31 | Positive | Patrick Smith | 2014-03-31 | 
| 10002 | BlankB | NameB  | 1978-10-28 | 1000001 | 4600001 | 2011-08-19 | Positive | Patrick Smith | 2011-08-19 | 
| 10003 | BlankC | NameC  | 1941-06-08 | 1000002 | 4600002 | 2011-10-18 | Positive | Patrick Smith | 2014-10-18 | 
| 10004 | BlankD | NameD  | 1952-08-01 | 1000003 | 4600003 | 2011-10-20 | Positive | Patrick Smith | 2014-10-20 | 

回答

1

這是因爲那些DOB的是從1969年12月31日之前,再UNIX新紀元開始,所以在此之前,任何事情會是負的。

維基百科:

Unix時間,或POSIX時間,是用於說明在時刻的系統中,定義爲由於00:00:00協調通用時間以來經過的秒數(UTC) ,1970年1月1日星期四,不包括閏秒。

稍微詳細一點:基本上你想要做的是不可能的。根據它的用途,可能有不同的方法可以做到這一點,但使用UNIX時間戳可能不是像這樣的日期的最佳想法。

+0

哇,我當然沒有想到這一點。很早就開始!擺脫UNIX_TIMESTAMP調用後,我可以看到我的日期的「年」,但沒有別的。 – user2573020

+0

咦?即使使用'SELECT *'它們顯示整個日期?無論如何,你怎麼以UNIX時間戳格式來設置它? – SharkofMirkwood

+0

我將日期存儲在一個對象中,然後用++調用它們echo <?php echo date('md Y',$ person-> nextVst)?>; ++但是,如果沒有SQL語句中的UNIX_TIMESTAMP,我會收到垃圾 – user2573020

相關問題