作者 主題: [問題] mktime 計算 1970 年 以前的timestamp傳回值為 -1  (閱讀 5757 次)

0 會員 與 1 訪客 正在閱讀本文。

seanhuang

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
這段程式在 RH 9 + PHP 4.0.6 下執行為

for($li=1970; $li>1940; $li--){
  $timenow = mktime(0,0,0,1,1,$li);
  echo $li.':'.$timenow.'<br />';
}

-------------------------------------------------------------------

1970:-28800
1969:-1
1968:-1
1967:-1
1966:-1
1965:-1
1964:-1
1963:-1
1962:-1
1961:-1
1960:-1
1959:-1
1958:-1
1957:-1
1956:-1
1955:-1
1954:-1
1953:-1
1952:-1
1951:-1
1950:-1
1949:-1
1948:-1
1947:-1
1946:-1
1945:-1
1944:-1
1943:-1
1942:-1
1941:-1

------------------------------------------------------

但是在 RH 6.2 + PHP 4.0.6 下執行卻可以

1970:-28800
1969:-31564800
1968:-63187200
1967:-94723200
1966:-126259200
1965:-157795200
1964:-189417600
1963:-220953600
1962:-252489600
1961:-284025600
1960:-315648000
1959:-347184000
1958:-378720000
1957:-410256000
1956:-441878400
1955:-473414400
1954:-504950400
1953:-536486400
1952:-568108800
1951:-599644800
1950:-631180800
1949:-662716800
1948:-694339200
1947:-725875200
1946:-757411200
1945:-788947200
1944:-820569600
1943:-852105600
1942:-883641600
1941:-915177600
---------------------------------------------

請問有人知道是怎麼一回事嗎?
有沒有解決的方法呢?

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
自己處理一下
year <1970
abs_year=1970+(1970-year)
轉作秒後再做 * -1 動作

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5411
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
timestamp 的定義, 原本就是由 1970 年開始, 對於之前是沒有定義的.
如果有這之前的時間運算, 並不建議使用 timestamp, 你根本無法確定你寫的程式下一次會不會還是正確的.