iT邦幫忙

0

日期分類問題

php
  • 分享至 

  • xImage

假設一個區間2009-02-01~2009-04-30
1-4算一個區間,5、6、日各算一個區間
如何抓出這段日期包含了幾個1-4、幾個5、幾個6、幾個日?

chan15 iT邦新手 2 級 ‧ 2009-08-11 14:03:09 檢舉
昨天試了一下,順利寫出來了。

<?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
?>
讚!!我是MIS,看不懂程式設計,雖然知道一點點原理........

發問,最後有完成,還加上像你這樣清楚解釋

我忍不住要用力稱讚了!!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
8
saiue
iT邦研究生 1 級 ‧ 2009-08-11 12:13:19
最佳解答

因為沒有註明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
有很多寫好的函式可以參考

6
Ken(Bigcandy)
iT邦大師 1 級 ‧ 2009-08-11 11:32:20

抓字串吧

2
sam0407
iT邦大師 1 級 ‧ 2009-08-11 22:59:31

雖然我不會寫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了!

chan15 iT邦新手 2 級 ‧ 2009-08-11 23:53:02 檢舉

您好,我已經寫出來了。 ^^

saiue iT邦研究生 1 級 ‧ 2009-08-12 17:27:14 檢舉


我看了板主的答案
我也發現我沒有把需求看懂
真是粗心

我要發表回答

立即登入回答