假設一個區間2009-02-01~2009-04-30
1-4算一個區間,5、6、日各算一個區間
如何抓出這段日期包含了幾個1-4、幾個5、幾個6、幾個日?
<?php $d1 = '2009-08-11'; $d2 = '2009-08-20'; $sumNormal = 0; // 星期一到四 $sumFriday = 0; // 星期五 $sumSaturday = 0; //星期六 $sumSunday = 0; // 星期日 $duration = (strtotime($d2)-strtotime($d1))/86400; // 天數 for ($i = 0; $i <= $duration; $i++) { switch(date('w', mktime(0, 0, 0, date('m', strtotime($d1)), date('d', strtotime($d1))+$i, date('Y', strtotime($d1))))) { case '1': case '2': case '3': case '4': $sumNormal++; break; case '5': $sumFriday++; break; case '6': $sumSaturday++; break; case '0': $sumSunday++; break; } } echo '平常日:' . $sumNormal . '<br>'; echo '星期五:' . $sumFriday . '<br>'; echo '星期六:' . $sumSaturday . '<br>'; echo '星期日:' . $sumSunday ?>
因為沒有註明php的版本
所以用最舊的算法
為了讓程式清楚
範例只有大的日期轉小的日期
邏輯大概是
將兩個字串轉為 timestamp
算出差異的 timestamp
再轉換為 日期
<SCRIPT LANGUAGE="php">
$a = '2009-02-01';
$b = '2009-04-30';
// 轉換為 timestamp
$at = mktime(0,0,0,02,01,2009);
$bt = mktime(0,0,0,04,30,2009);
// 算出相差的時間
$ct = $bt - $at;
//計算差幾年
$cy = floor($ct / 31536000);
//計算差多少月
$cm = floor($ct / 2678400);
//計算差多少天
$cd = floor($ct / 86400);
</SCRIPT>
有興趣請查一下 timestamp 計算方式
因為在 32位元的os是有計算限制的
在的php 5.1.1以後的版本已經內建 object DateTime 可以直接使用
如果你的版本低於 php 5.1.1
可以查詢 datediff
有很多寫好的函式可以參考
雖然我不會寫PHP,但是我有Google....
看到上面雖然有兩位熱心邦友的回答,都是很可惜都沒有看懂chan15的需求,實在忍不住了...
請您先參考saiue提供的程式碼,您就已經有$at(起始日期的timestamp)、$bt(結束日期的timestamp)、$cd(相差天數)等資訊.
再參考
http://www.php5.idv.tw/modules.php?mod=books&act=show&shid=128中getdate()函數的說明及範例,也不難知道當$time這個array中的wday=0~6的意義.
最後寫一個迴圈,在迴圈裡去取得每一天的timestamp,判斷每一天是星期幾,用4個變數去累加就OK了!