在php和MySql中計(jì)算時(shí)間差的方法詳解
在php中計(jì)算時(shí)間差有時(shí)候是件麻煩的事!不過(guò)只要你掌握了日期時(shí)間函數(shù)的用法那這些也就變的簡(jiǎn)單了。
最近在研究自己愛(ài)圍脖的時(shí)候就要計(jì)算到戀愛(ài)天數(shù),這需要php根據(jù)每天的日期進(jìn)行計(jì)算,下面就來(lái)談?wù)剬?shí)現(xiàn)這種日期計(jì)算的幾種方法:
(1) 如果有數(shù)據(jù)庫(kù)就很容易了!若是MSSQL可以使用觸發(fā)器!用專(zhuān)門(mén)計(jì)算日期差的函數(shù)datediff()便可!若是MYSQL那就用兩個(gè)日期字段的差值計(jì)算的計(jì)算結(jié)果保存在另一個(gè)數(shù)值型字段中!用時(shí)調(diào)用便可!
(2)如果沒(méi)有數(shù)據(jù)庫(kù),那就得完全用php的時(shí)間日期函數(shù)!
下面主要說(shuō)明之:
例:計(jì)算1998年5月3日到1999-6-5的天數(shù):
$startdate=mktime("0","0","0","5","3","1998"); $enddate=mktime("0","0","0","6","5","1999"); //所得到的值為從1970-1-1到參數(shù)時(shí)間的總秒數(shù)結(jié)果是整數(shù).那么下面的代碼就好編多了
$days=round(($enddate-$startdate)/3600/24) ;
echo $days;
其中$days為得到的天數(shù);
若mktime()中的參數(shù)缺省,那表示使用當(dāng)前日期,這樣便可計(jì)算從借書(shū)日期至今的天數(shù)。
最后說(shuō)一下SQL的計(jì)算方法:
DateDiff 函數(shù)
描述:返回兩個(gè)日期之間的時(shí)間間隔。
語(yǔ)法:
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear>)
interval: 必選。字符串表達(dá)式,表示用于計(jì)算 date1 和 date2 之間的時(shí)間間隔。有關(guān)數(shù)值,請(qǐng)參閱“設(shè)置”部分。
date1, date2: 必選。日期表達(dá)式。用于計(jì)算的兩個(gè)日期。
firstdayofweek: 可選。指定星期中第一天的常數(shù)。如果沒(méi)有指定,則默認(rèn)為星期日。有關(guān)數(shù)值,請(qǐng)參閱“設(shè)置”部分。
firstweekofyear: 可選。指定一年中第一周的常數(shù)。如果沒(méi)有指定,則默認(rèn)為 1 月 1 日所在的星期。有關(guān)數(shù)值,請(qǐng)參閱“設(shè)置”部分。
interval 參數(shù)可以有以下值:
yyyy (年)
q (季度)
m (月)
y (一年的日數(shù))
d (日)
w (一周的日數(shù))
ww (周)
h (小時(shí))
n (分鐘)
s (秒)
firstdayofweek 參數(shù)可以有以下值:
(以下分別為:常數(shù) 值 描述)
vbUseSystem 0 使用區(qū)域語(yǔ)言支持 (NLS) API 設(shè)置。
vbSunday 1 星期日(默認(rèn))
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
firstweekofyear 參數(shù)可以有以下值:
(以下分別為:常數(shù) 值 描述)
vbUseSystem 0 使用區(qū)域語(yǔ)言支持 (NLS) API 設(shè)置。
vbFirstJan1 1 由 1 月 1 日所在的星期開(kāi)始(默認(rèn))。
vbFirstFourDays 2 由在新年中至少有四天的第一周開(kāi)始。
vbFirstFullWeek 3 由在新的一年中第一個(gè)完整的周開(kāi)始。
說(shuō)明:DateDiff 函數(shù)用于判斷在兩個(gè)日期之間存在的指定時(shí)間間隔的數(shù)目。
例如可以使用 DateDiff 計(jì)算兩個(gè)日期相差的天數(shù),或者當(dāng)天到當(dāng)年最后一天之間的星期數(shù)。
要計(jì)算 date1 和 date2 相差的天數(shù),可以使用“一年的日數(shù)”(“y”)或“日”(“d”)。當(dāng) interval 為“一周的日數(shù)”(“w”)時(shí),DateDiff 返回兩個(gè)日期之間的星期數(shù)。
如果 date1 是星期一,則 DateDiff 計(jì)算到 date2 之前星期一的數(shù)目。此結(jié)果包含 date2 而不包含 date1。
如果 interval 是“周”(“ww”),則 DateDiff 函數(shù)返回日歷表中兩個(gè)日期之間的星期數(shù)。函數(shù)計(jì)算 date1 和 date2 之間星期日的數(shù)目。
如果 date2 是星期日,DateDiff 將計(jì)算 date2,但即使 date1 是星期日,也不會(huì)計(jì)算 date1。
如果 date1 晚于 date2,則 DateDiff 函數(shù)返回負(fù)數(shù)。 firstdayofweek 參數(shù)會(huì)對(duì)使用“w”和“ww”間隔符號(hào)的計(jì)算產(chǎn)生影響。
如果 date1 或 date2 是日期文字,則指定的年度會(huì)成為日期的固定部分。但是如果 date1 或 date2 被包括在引號(hào) (“ ”) 中并且省略年份,則在代碼中每次計(jì)算 date1 或 date2 表達(dá)式時(shí),將插入當(dāng)前年份。這樣就可以編寫(xiě)適用于不同年份的程序代碼。
在 interval 為“年”(“yyyy”)時(shí),比較 12 月 31 日和來(lái)年的 1 月 1 日,雖然實(shí)際上只相差一天,DateDiff 返回 1 表示相差一個(gè)年份。
DatePart 函數(shù)
描述:返回給定日期的指定部分。 語(yǔ)法:
DatePart(interval, date[, firstdayofweek[, firstweekofyear>)
DatePart: 函數(shù)的語(yǔ)法有以下參數(shù):
interval: 必選。字符串表達(dá)式,表示要返回的時(shí)間間隔。有關(guān)數(shù)值,請(qǐng)參閱“設(shè)置”部分。
date: 必選。要計(jì)算的日期表達(dá)式。
firstdayofweek: 可選。指定星期中的第一天的常數(shù)。如果沒(méi)有指定,則默認(rèn)為星期日。有關(guān)數(shù)值,請(qǐng)參閱“設(shè)置”部分。
firstweekofyear: 可選。指定一年中第一周的常數(shù)。如果沒(méi)有指定,則默認(rèn)為 1 月 1 日所在的星期。有關(guān)數(shù)值,請(qǐng)參閱“設(shè)置”部分。
其中interval 參數(shù)可以有以下值: yyyy (年) 、q (季度) 、m (月) 、y (一年的日數(shù)) 、d (日) 、w (一周的日數(shù)) 、ww (周) 、h (小時(shí)) 、n (分鐘) 、s (秒)
其中firstdayofweek 參數(shù)可以有以下值:
(以下分別為:常數(shù) 值 描述)
vbUseSystem 0 使用區(qū)域語(yǔ)言支持 (NLS) API 設(shè)置。
vbSunday 1 星期日(默認(rèn))
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
firstweekofyear 參數(shù)可以有以下值:
(以下分別為:常數(shù) 值 描述)
vbUseSystem 0 使用區(qū)域語(yǔ)言支持 (NLS) API 設(shè)置。
vbFirstJan1 1 由 1 月 1 日所在的星期開(kāi)始(默認(rèn))。
vbFirstFourDays 2 由在新年中至少有四天的第一周開(kāi)始。
vbFirstFullWeek 3 由在新的一年中第一個(gè)完整的周(不跨年度)開(kāi)始。
說(shuō)明:DatePart 函數(shù)用于計(jì)算日期并返回指定的時(shí)間間隔。例如使用 DatePart 計(jì)算某一天是星期幾或當(dāng)前的時(shí)間。
其中firstdayofweek 參數(shù)會(huì)影響使用“w”和“ww”間隔符號(hào)的計(jì)算。
如果 date 是日期文字,則指定的年度會(huì)成為日期的固定部分。但是如果 date 被包含在引號(hào) (“ ”) 中,并且省略年份,則在代碼中每次計(jì)算 date 表達(dá)式時(shí),將插入當(dāng)前年份。這樣就可以編寫(xiě)適用于不同年份的程序代碼!
以上所述就是本文的全部?jī)?nèi)容了,希望能夠?qū)Υ蠹沂炀氄莆誴hp有所幫助。
請(qǐng)您花一點(diǎn)時(shí)間將文章分享給您的朋友或者留下評(píng)論。我們將會(huì)由衷感謝您的支持!
相關(guān)文章
PHP排序二叉樹(shù)基本功能實(shí)現(xiàn)方法示例
這篇文章主要介紹了PHP排序二叉樹(shù)基本功能實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了PHP排序二叉樹(shù)的定義、遍歷、節(jié)點(diǎn)插入、查找等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05php include的妙用,實(shí)現(xiàn)路徑加密
用這種方法比較繁瑣,只能隱藏后臺(tái)腳本的路徑,前端的腳本路徑仍然可以在源文件中看得到(baseref) 在地址欄上看到的地址都是index.php?xxxxxxxx2008-07-07PHP實(shí)現(xiàn)斷點(diǎn)續(xù)傳亂序合并文件的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)斷點(diǎn)續(xù)傳亂序合并文件的方法,涉及php文件讀寫(xiě)、傳輸、排序等相關(guān)操作技巧,需要的朋友可以參考下2018-09-09php中抓取網(wǎng)頁(yè)內(nèi)容的實(shí)例詳解
這篇文章主要介紹了php中抓取網(wǎng)頁(yè)內(nèi)容的實(shí)例詳解的相關(guān)資料,這里提供兩種實(shí)現(xiàn)方法,希望能幫助到大家,需要的朋友可以參考下2017-08-08PHP 5.3新特性命名空間規(guī)則解析及高級(jí)功能
本文介紹了PHP命名空間的一些術(shù)語(yǔ),其解析規(guī)則,以及一些高級(jí)功能的應(yīng)用,希望能夠幫助讀者在項(xiàng)目中真正使用命名空間。2010-03-03