妖精动漫浏览页面弹窗登录,天天摸天天做天天爽水多,97影视,大尺度性做爰的小说金陵春

太倉(cāng)人才網(wǎng)首頁(yè) | 快捷方式 | 加入收藏 | 手機(jī)版 | 微信公眾號(hào) | 小程序 歡迎來(lái)到陽(yáng)光太倉(cāng)人才網(wǎng)!  [登錄](méi) [免費(fèi)注冊(cè)]  2025年05月19日 星期一  今日訪問(wèn)量 次  當(dāng)前在線
太倉(cāng)人才網(wǎng)
  滾動(dòng)信息:
今天 05月19日 00:00起 更新職位: 1 個(gè) 投遞簡(jiǎn)歷:23 |   實(shí)時(shí)動(dòng)態(tài) ... 更多動(dòng)態(tài)

當(dāng)前系統(tǒng)在2038年之后datetime類也無(wú)法獲取當(dāng)前時(shí)間的解決

發(fā)布者:太倉(cāng)人才網(wǎng)   發(fā)布時(shí)間:2018-04-18   閱讀數(shù)量:    
由于php 32位使用 int 類型保存時(shí)間戳,也就是從1970 00:00:00 到當(dāng)前時(shí)間的秒數(shù)。
而32位int 數(shù)字的取值范圍是 -2147483648 到 2147483647。
 
所以當(dāng) 時(shí)間戳為最大值 2147483647 時(shí),表示的時(shí)間是 2038-01-19 03:14:07 或北京時(shí)間 2038-01-19 11:14:07 (為了表述方便,下文中,將這個(gè)臨界點(diǎn)時(shí)間稱之為 T0)。
而當(dāng)時(shí)間大于這個(gè)時(shí)間時(shí),php很多內(nèi)置函數(shù)都會(huì)出錯(cuò)。
比如
 
當(dāng)日期和時(shí)間大于 北京時(shí)間 2038-01-19 11:14:07 時(shí)
time()函數(shù),原本應(yīng)該返回時(shí)間戳,現(xiàn)在會(huì)始終返回-1。
date("Y-m-d H:i:s")函數(shù),會(huì)返回 1970-01-01 07:59:59(北京時(shí)間),其實(shí)也是因?yàn)?time()=-1導(dǎo)致的,date默認(rèn)的第二個(gè)參數(shù)就是time()。
同樣,mktime() 等函數(shù)也會(huì)異常。
 
上網(wǎng)查了解決辦法,
1、換用64位系統(tǒng)。這里說(shuō)的64位系統(tǒng),需要操作系統(tǒng)、web服務(wù)系統(tǒng),以及PHP都要64位的。
2、使用php5.2之后推出的 DateTime 類。
 
首先說(shuō)第一種方法,因?yàn)槲业姆?wù)器建設(shè)在Windows系統(tǒng)上,然后又有幾個(gè)自制插件,這些插件在php 64位下面可能不能使用,因此這個(gè)方法不能用。
再說(shuō)DateTime類,網(wǎng)上幾乎幾十篇文章都說(shuō)使用DateTime類就能解決2038年問(wèn)題。
 
我在自己的服務(wù)器上測(cè)試了一下,使用DateTime類似乎確實(shí)可以讓日期超過(guò)2038上限,各種轉(zhuǎn)換,都沒(méi)問(wèn)題,這里我不具體說(shuō)明,大家網(wǎng)上搜"php datetime",都有說(shuō)明。
但是,我在把服務(wù)器的時(shí)間設(shè)置為2040年4月18日的時(shí)候,發(fā)現(xiàn),datetime 類依然無(wú)法獲取當(dāng)前時(shí)間。代碼如下:
$date = new DateTime();
echo $date->format('Y-m-d H:i:s');
 
輸出的還是 1970-01-01 07:59:59
 
但是,如果使用 $date->setDate(2040,4,18) 之后,再顯示,再輸出時(shí)間戳等,都是正常的代碼如下:
$date = new DateTime();
$date->setDate(2040,4,18);
$date->setTime(10,24,11);
echo $date->format('Y-m-d H:i:s')."
rn";
echo $date->format('U')."
rn";
 
這時(shí) 輸出時(shí)間 2040-04-18 10:24:11 ,以及時(shí)間戳 2218328651 都是正常的。
 
問(wèn)題在于,datetime 類可以解決 2038年之后的時(shí)間的各種運(yùn)算和轉(zhuǎn)換,但是當(dāng)系統(tǒng)日期在2038年那個(gè)T0時(shí)間之后,php系統(tǒng)根本無(wú)法獲取當(dāng)前時(shí)間。
我還試了  new DateTime("today");new DateTime('+2 days');new DateTime('tomorrow'); 等等,都無(wú)法獲取今天,明天,后天等日期。
這時(shí),整個(gè)php 系統(tǒng)無(wú)法獲取當(dāng)前的年月日和時(shí)間。
 
然后我開始在php的系統(tǒng)數(shù)組 $_SERVER 中尋找,看看哪里能找到和時(shí)間相關(guān)的內(nèi)容,終于被我找到一個(gè) $_SERVER["REQUEST_TIME"],這個(gè)實(shí)際上是一個(gè)記錄用戶刷新頁(yè)面時(shí)php相應(yīng)時(shí)刻的時(shí)間。它的值,在T0之前,和time()是一致的,但是,當(dāng)T0之后,它就變成負(fù)數(shù)了。那么,怎么通過(guò) $_SERVER["REQUEST_TIME"] 來(lái)獲取真實(shí)的 時(shí)間戳呢?
 
很簡(jiǎn)單,32位int 數(shù)字的取值范圍是 -2147483648 到 2147483647,轉(zhuǎn)成2進(jìn)制就會(huì)發(fā)現(xiàn),其實(shí)是最高位用作符號(hào)位,最高位0表示正數(shù),最高位1表示負(fù)數(shù),當(dāng)數(shù)字達(dá)到 2147483647后,二進(jìn)制 就是 01111111 11111111 11111111 11111111(31個(gè)1),這時(shí)就是T0時(shí)刻的時(shí)間戳,繼續(xù)+1 以后,變成了 10000000000000000000000000000000 (31個(gè)0),如果是無(wú)符號(hào)32位整數(shù),就是 2147483648(正數(shù)) 但是在有符號(hào)的整數(shù)里,最高位1表示負(fù)數(shù),就是 -2147483648(負(fù)數(shù)),而 $_SERVER["REQUEST_TIME"] 的特性是根據(jù)時(shí)間的推移進(jìn)行累加。所以,它的時(shí)間線如下:
T0 之前:它等于 1970 00:00:00 到當(dāng)前時(shí)間的秒數(shù),和time()相同
T0 時(shí): 它等于 2147483647
T0 后1秒: 它等于 2147483647+1=2147483648  被表示為 -2147483648  我們把 -2147483648 記作 T1,T1=T0+1秒的時(shí)刻
T0 后N秒:-2147483648-1+N 
 
所以,當(dāng) $_SERVER["REQUEST_TIME"]<0 時(shí),真正的時(shí)間戳為  $_SERVER["REQUEST_TIME"]-(-2147483648)+ 2147483647。
其中 $_SERVER["REQUEST_TIME"]-(-2147483648)表示 T1(變成負(fù)數(shù),即T0+1秒) 時(shí)刻到當(dāng)前時(shí)間 過(guò)了多少秒。
 
據(jù)此,寫出一個(gè)新的取代time()的函數(shù),該函數(shù)在系統(tǒng)時(shí)間超過(guò)T0 時(shí),也能返回正確的時(shí)間戳,但是它的范圍是無(wú)符號(hào)32位上限 4294967295,北京時(shí)間 2106-02-07 06:28:15。在這個(gè)時(shí)間之前,應(yīng)該都可以正常使用。
 
function sunTime(){
  if($_SERVER["REQUEST_TIME"]>0){
    $t=$_SERVER["REQUEST_TIME"];
  }else{
    $t0=PHP_INT_MAX; // 第 2147483647 秒 再過(guò)一秒為 2147483648秒,但最高位變成1,系統(tǒng)中為 -2147483648
    $t1=0-$t0-1;   // t0后面1秒,瞬間變成負(fù)數(shù),值為 -2147483648
    $t2=($_SERVER["REQUEST_TIME"]);//雖然$_SERVER["REQUEST_TIME"]變成了負(fù)數(shù),但是 系統(tǒng)依然通過(guò) +1秒 來(lái)計(jì)時(shí)
    $t=$t2-$t1+$t0."";  //t2-t1 就是變成負(fù)數(shù)后過(guò)了多少秒,t0就是變成負(fù)數(shù)前的秒數(shù)。
  }
  $date=new datetime("@".$t);
  $timemark=$date->format("U");
  return $timemark;
}
 
所以,目前網(wǎng)上很多人都以為使用 DateTime類可以解決問(wèn)題,殊不知等時(shí)間真正到了2038那個(gè)時(shí)間之后,php系統(tǒng)獲得當(dāng)前時(shí)間都會(huì)出錯(cuò)。而我這方法也是目前網(wǎng)上唯一存在的方法。
 
陽(yáng)光浪子
2018-04-18
網(wǎng)站公告
網(wǎng)頁(yè)招聘

太倉(cāng)人才網(wǎng)公眾號(hào)

太倉(cāng)人才網(wǎng)手機(jī)版

陽(yáng)光太倉(cāng)人才網(wǎng)小程序

太倉(cāng)人才網(wǎng)客服
固定電話:0512-33003311
移動(dòng)電話:18913780685
傳真號(hào)碼:0512-53356917
郵箱地址:jlee@tcrcsc.com
在線服務(wù):QQ 1987127758 ;?QQ 451677071
太倉(cāng)人才網(wǎng)(www.czbxg.com) 太倉(cāng)人才網(wǎng)WAP(wap.tcrcsc.com) 蘇州市人力資源服務(wù)業(yè)知名品牌 關(guān)于我們 網(wǎng)頁(yè)制作/數(shù)據(jù)庫(kù):陽(yáng)光技術(shù)小組
版權(quán)所有:太倉(cāng)市瑞福爾人力資源服務(wù)有限公司;ICP許可證:蘇B2-20190061;蘇ICP備10224897號(hào)-1;軟著登字第0395877號(hào);人力資源中介許可320585000030號(hào)
正在載入...
消息內(nèi)容
主站蜘蛛池模板: 安仁县| 阳新县| 张家港市| 红桥区| 集贤县| 周口市| 民乐县| 香河县| 铁力市| 上饶县| 临澧县| 邻水| 柯坪县| 遵化市| 隆化县| 张家港市| 绍兴市| 洛宁县| 巴东县| 红原县| 琼海市| 崇左市| 襄城县| 临朐县| 韶关市| 高密市| 涡阳县| 呼和浩特市| 松潘县| 和平县| 张家界市| 康乐县| 临夏县| 西盟| 黔南| 遵义县| 天台县| 民和| 洪雅县| 荥阳市| 牡丹江市|