PHP 板


LINE

看板 PHP  RSS
這學期修課的關係,接觸了PHP, 期末的自訂term project剛好需要許多日期時間的計算, 所以就寫了個class(PHP5),也當作是一種練習吧XD 稍微修改了一些內容, 因為後來領會了class中的屬性, 與其用var宣告變數名稱, 還不如用陣列來儲存更符合PHP的處理方式, 因為就算直接宣告變數名稱, 直譯的PHP還是需要對變數成員做搜尋的動作。 所以把之前一堆var變數改成$this->_[]陣列來存放。 下載位置:http://o0o.myweb.hinet.net/php/date.inc.php <?php # #˙objDate日期時間物件 作者:[email protected] # P.S.本物件受到unix時間戳的限制,僅可處理1970~2038年的日期。 # #˙屬性:與getdate()函數傳回陣列相同 # $this->_['seconds'] 秒 # $this->_['minutes'] 分 # $this->_['hours'] 時 # $this->_['mday'] 日 # $this->_['mon'] 月 # $this->_['year'] 年 # $this->_['yday'] 一年中的天數 # $this->_['wday'] 星期 # $this->_['weekday'] 星期完整名稱 # $this->_['month'] 月份完整名稱 # $this->_[0] timestamp秒數 # #˙方法: # bool SameAs($interval,$that=null) # 傳回與$that日期時間是否相同,可比較多項目 # [1]單位-比較單位,可用多項目如用'dw'檢查[日/星期]相同 # [2]被比較-日期時間的文字或此物件,若不填則以此刻為準 # # float Diff($interval,$that=null) # 傳回與$that日期時間的正負值差距(日、時、分、星期會有小數點) # [1]單位-日期時間差距單位,如'd'檢查差幾[日] # [2]被比較-日期時間的文字或此物件,若不填則以此刻為準 # # objDate Add($interval,$value) # 傳回加減後的日期時間 # [1]單位-日期時間差距單位,如'd'則加減幾[日] # [2]差值-正負整數 # # objDate SwitchSecond($second=0) 改變(此刻)日期時間的"秒" # objDate SwitchMinute($minute=0) 改變(此時)日期時間的"分" # objDate SwitchHour($hour=0)   改變(今天)日期時間的"小時" # objDate SwitchDay($day=1)    改變(本月)日期時間的"日" # objDate SwitchMonth($month=1)  改變(今年)日期時間的"月" # objDate SwitchYear($year)    改變日期時間的"年" # # objDate SwitchDate($month=1,$day=1)改變(今年)日期時間的"月日" # objDate SwitchWeekDay($weekday=0) 改變(本星期)日期時間的"星期",0=星期日 # # objDate MonthDayFirst() 傳回本月第一天 # objDate MonthDayLast() 傳回本月最後一天 # objDate YearDayFirst() 傳回今年第一天 # objDate YearDayLast()  傳回今年最後一天 # # int MonthDays() 傳回本月天數 # int YearDays()  傳回今年天數 # # str ToDateTime() 傳回日期時間格式(Y-m-d G:i:s) # str ToDate()   僅傳回日期格式(Y-m-d) # str ToTime()   僅傳回時間格式(G:i:s) # str ToGMT()    傳回格林威治時間(Y-m-d H:M:S) # # str ToMonthName($fullname=False) 傳回月份名稱 # str ToWeekDayName($fullname=True) 傳回星期名稱 # str ToAMPM($uppercase=True)    傳回上午/下午 # # str ToFormat($format) 根據傳入的$format傳回指定的日期時間格式 # #˙使用範例: # $Birth=new objDate('1983/6/14');//傳入日期 # $Today=new objDate();//傳入值為空或無法辨識則以此刻為準 # echo "<p>我生日是{$Birth},現在已經{$Birth->Diff('y')}歲啦! # <p>今年生日星期幾?{$Birth->SwitchYear($Today->_['year'])->ToWeekDayName()}, # <p>今年二月有幾天?{$Today->SwitchMonth(2)->MonthDays()}, # <p>GMT和此刻同月同日?{$Today->SameAs('md',$Today->ToGMT())}"; #˙ # class objDate{ public$_=array(); function __construct($datetime=null){//建構:設定時間 if(!is_numeric($datetime))$datetime=strtotime($datetime);//嘗試轉換文字 $this->_=(is_numeric($datetime))?getdate($datetime):getdate();//失敗?此刻 } function __toString(){//輸出文字 return$this->ToDate();//大部分應用只需日期 } function SameAs($interval,$that=null){//傳回日期時間是否相同,可比較多項目 if(!($that instanceof objDate))$that=new objDate($that);//不同格式則轉換 $interval=strtolower($interval);//轉換為小寫 if(False!==strpos($interval,'d')) if($this->_['mday']!=$that->_['mday'])return False;//日 if(False!==strpos($interval,'m')) if($this->_['mon']!=$that->_['mon'])return False;//月 if(False!==strpos($interval,'y')) if($this->_['year']!=$that->_['year'])return False;//年 if(False!==strpos($interval,'s')) if($this->_['seconds']!=$that->_['seconds'])return False;//秒 if(False!==strpos($interval,'n')) if($this->_['minutes']!=$that->_['minutes'])return False;//分 if(False!==strpos($interval,'h')) if($this->_['hours']!=$that->_['hours'])return False;//時 if(False!==strpos($interval,'w')) if($this->_['wday']!=$that->_['wday'])return False;//星期 return True;//全部Pass則視為相同 } function Diff($interval,$that=null){//傳回日期時間的差距 if(!($that instanceof objDate))$that=new objDate($that);//不同格式則轉換 switch(strtolower($interval)){//時距 case'n':return($that->_[0]-$this->_[0])/60;//分 case'h':return($that->_[0]-$this->_[0])/3600;//時 case'd':return($that->_[0]-$this->_[0])/86400;//天 case'm':return($that->_['year']-$this->_['year'])*12+ $that->_['mon']-$this->_['mon'];//月 case'y':return$that->_['year']-$this->_['year'];//年 case'w':return($that->_[0]-$this->_[0])/604800;//星期 default:return$that->_[0]-$this->_[0];//秒 } } function Add($interval,$value){//傳回加減後的日期時間 switch(strtolower($interval)){//時距 case's':return$this->SwitchSecond($this->_['seconds']+$value);//秒 case'n':return$this->SwitchMinute($this->_['minutes']+$value);//分 case'h':return$this->SwitchHour($this->_['hours']+$value);//時 case'd':return$this->SwitchDay($this->_['mday']+$value);//日 case'm':return$this->SwitchMonth($this->_['mon']+$value);//月 case'y':return$this->SwitchYear($this->_['year']+$value);//年 case'w':return$this->SwitchDay($this->_['mday']+$value*7);//星期 default:return$this;//不處理 } } function SwitchSecond($second=0){//改變日期時間的"秒" return new objDate( mktime($this->_['hours'],$this->_['minutes'],$second, $this->_['mon'],$this->_['mday'],$this->_['year']));//秒 } function SwitchMinute($minute=0){//改變日期時間的"分" return new objDate( mktime($this->_['hours'],$minute,$this->_['seconds'], $this->_['mon'],$this->_['mday'],$this->_['year']));//分 } function SwitchHour($hour=0){//改變日期時間的"小時" return new objDate( mktime($hour,$this->_['minutes'],$this->_['seconds'], $this->_['mon'],$this->_['mday'],$this->_['year']));//時 } function SwitchDay($day=1){//改變日期時間的"日" return new objDate( mktime($this->_['hours'],$this->_['minutes'],$this->_['seconds'], $this->_['mon'],$day,$this->_['year']));//日 } function SwitchMonth($month=1){//改變日期時間的"月" return new objDate( mktime($this->_['hours'],$this->_['minutes'],$this->_['seconds'], $month,$this->_['mday'],$this->_['year']));//月 } function SwitchDate($month=1,$day=1){//改變日期時間的"月日" return new objDate( mktime($this->_['hours'],$this->_['minutes'],$this->_['seconds'], $month,$day,$this->_['year']));//月日 } function SwitchYear($year){//改變日期時間的"年" return new objDate( mktime($this->_['hours'],$this->_['minutes'],$this->_['seconds'], $this->_['mon'],$this->_['mday'],$year));//年 } function SwitchWeekDay($weekday=0){//改變日期時間的"星期",0=星期日 return new objDate( mktime($this->_['hours'],$this->_['minutes'],$this->_['seconds'], $this->_['mon'],$this->_['mday']-$this->_['wday']+$weekday, $this->_['year']));//星期 } function MonthDayFirst(){//傳回本月第一天 return$this->SwitchDay(1); } function MonthDayLast(){//傳回本月最後一天 return$this->SwitchDate($this->_['mon']+1,0); } function YearDayFirst(){//傳回本年第一天 return$this->SwitchDate(1,1); } function YearDayLast(){//傳回本年最後一天 return$this->SwitchDate(12,31); } function MonthDays(){//傳回本月天數 return$this->MonthDayLast()->_['mday']; } function YearDays(){//傳回本年天數 return$this->YearDayLast()->_['yday']+1; } function ToDateTime(){//傳回日期時間格式 return$this->ToFormat('Y-m-d G:i:s'); } function ToDate(){//僅傳回日期格式 return$this->ToFormat('Y-m-d'); } function ToTime(){//僅傳回時間格式 return$this->ToFormat('G:i:s'); } function ToMonthName($fullname=False){//傳回月份名稱 return($fullname)?$this->_['month']:$this->ToFormat('M'); } function ToWeekDayName($fullname=True){//傳回星期名稱 return($fullname)?$this->_['weekday']:$this->ToFormat('D'); } function ToAMPM($uppercase=True){//傳回上午/下午 return$this->ToFormat($uppercase?'A':'a'); } function ToFormat($format){//傳回特定格式日期時間 return date($format,$this->_[0]); } function ToGMT(){//傳回格林威治時間 return gmstrftime('%Y-%m-%d %H:%M:%S',$this->_[0]); } } ?> ※ 編輯: l1l 來自: 140.113.164.11 (05/07 01:32) ※ 編輯: l1l 來自: 140.113.164.11 (05/09 18:35)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP