我該如何着手在給定的時間段(比如說,今天到下個月末)獲取所有工作工作日(星期一至星期五)?在一個月內查找所有工作日
1
A
回答
3
如果你使用PHP 5.2 +,你可以使用我寫的庫,以便處理日期遞歸在PHP稱爲When。
與庫,代碼將是這樣的:
$r = new When();
$r->recur(<start date here>, 'weekly')
->until(<end date here>)
->wkst('SU')
->byday(array('MO', 'TU', 'WE', 'TH', 'FR'));
while($result = $r->next())
{
echo $result->format('c') . '<br />';
}
1
1
僞未來的路:
現在計算之間的天數,月 的最後一天獲得了一週的當天(即星期三) 基礎上一週的當天,和在該月剩餘的天數中,計算該月剩餘多少個週末天數是簡單的計算 - 這將是該月剩餘的天數,減去該月剩餘的週日/週六的數量。
我會寫一個函數,是這樣的:
daysLeftInMonth(daysLeftInMonth, startingDayOfWeek, dayOfWeekToCalculate)
其中:
- daysLeftInMonth是一個月(30)的最後一天,減去當前的日期(15)
- startingDayOfWeek是你想要開始的一週中的哪一天(今天是星期三)
- dayOfWeekToCalculate是你想要計算的星期幾,例如週六或週日。 2011年6月目前擁有2日及2個星期六離開,直到本月
因此結束,你的算法變成類似:
getWeekdaysLeft(todaysDate)
... getWeekdaysLeft是一樣的東西:
sundaysLeft = daysLeftInMonth(lastDayOfMonth - todaysDate, "Wednesday", "Sunday");
saturdaysLeft = daysLeftInMonth(lastDayOfMonth - todaysDate, "Wednesday", "Saturday");
return ((lastDayOfMonth - todaysDate) - (sundaysLeft + saturdaysLeft));
1
該代碼至少執行了一部分要求。而不是「下個月底」,它只是在給定的天數內工作。
$dfrom = time();
$fourweeks = 7 * 4;
for ($i = 0; $i < $fourweeks; $i ++) {
$stamp = $dfrom + ($i * 24 * 60 * 60);
$weekday = date("D", $stamp);
if (in_array($weekday, array("Mon", "Tue", "Wed", "Thu", "Fri"))) {
print date(DATE_RSS, $stamp) . "\n";
}
}
2
這裏試試:http://codepad.org/wuAyAqnF
要使用它,只需一個時間戳傳遞給get_weekdays
。在當月的其餘時間,您將獲得所有工作日的數組,作爲時間戳。或者,您可以通過$to
參數 - 您將獲得$from
和$to
之間的所有工作日。
function get_weekdays ($from, $to=false) {
if ($to == false)
$to = last_day_of_month($from);
$days = array();
for ($x = $from; $x < $to; $x+=86400) {
if (date('w', $x) > 0 && date('w', $x) < 6)
$days[] = $x;
}
return $days;
}
function last_day_of_month($ts=false) {
$m = date('m', $ts);
$y = date('y', $ts);
return mktime(23, 59, 59, ($m+1), 0, $y);
}
2
本示例以快速而有效的方式正好滿足您的需求。 它不會做嵌套循環,並使用完全真棒DateTime對象。
$oDateTime = new DateTime();
$oDayIncrease = new DateInterval("P1D");
$aWeekDays = array();
$sStart = $oDateTime->format("m-Y");
while($oDateTime->format("m-Y") == $sStart) {
$iDayInWeek = $oDateTime->format("w");
if ($iDayInWeek > 0 && $iDayInWeek < 6) {
$aWeekDays[] = clone $oDateTime;
}
$oDateTime->add($oDayIncrease);
}
1
// Find today's day of the month (i.e. 15)
$today = intval(date('d'));
// Define the array that will hold the work days.
$work_days = array()
// Find this month's last day. (i.e. 30)
$last = intval(date('d', strtotime('last day of this month')));
// Loop through all of the days between today and the last day of the month (i.e. 15 through 30)
for ($i = $today; $i <= $last; $i++)
{
// Create a timestamp.
$timestamp = mktime(null, null, null, null, $i);
// If the day of the week is greater than Sunday (0) but less than Saturday (6), add the timestamp to an array.
if (intval(date('w', $timestamp)) > 0 && intval(date('w', $timestamp)) < 6)
$work_days[] = mktime($timestamp);
}
的$work_days
陣列將包含你可以用這種方式時間戳:上面的代碼與工作
echo date('Y-m-d', $work_days[0]);
在PHP 4以及PHP 5中。它不依賴於DateTime類的功能,該功能在PHP 5.2之前是不可用的,並且不需要使用由其他人。
相關問題
- 1. Power BI - 一個月內的工作日
- 2. 使用Date對象查找一個月中的所有日期?
- 3. 查找按月份的工作日
- 4. 查找當月的第一個工作日
- 5. php在一個月內獲得所有星期日的日期
- 6. WHERE聲明查找一個月內的所有記錄?
- 7. 如何在Java中查找一個月的最後一個工作日
- 8. 我如何得到所有的工作日和日期在一個月
- 9. 在一個月內合併所有日期和數據!
- 10. 遞增並在一個月內打印所有日期
- 11. 下個月的第一個工作日
- 12. 如何在oracle中查找一個月內所有星期的開始日期和結束日期
- 13. Excel日期公式查找下個月的第二個工作日的日期
- 14. 在一個月內獲取工作日X的數量
- 15. 如何獲得特定工作日的一個月中的所有日子?
- 16. 從jquery UI日曆中選擇一個月的所有工作日
- 17. 如何在一個月內找回年齡爲21歲的所有員工?
- 18. 找到最後一個工作日給定月份PostgreSQL中
- 19. 如何從jquery datepicker列出一個月內的所有日期?
- 20. 突出顯示一個月內的所有星期日
- 21. SQL在幾個月內找到員工離職日期
- 22. 如何使用SQL查找當前月份的最後一個工作日
- 23. 查找一個月中星期三(或其他工作日)的數量 - Oracle SQL
- 24. 的Oracle SQL查詢列出前一個月的所有日期
- 25. 如何使用Python在過去6個月內找到所有日期?
- 26. Ember Data 2.0查找所有不工作
- 27. 燼數據查找所有不工作
- 28. 如何在一個月內找到第一個和最後一個日期
- 29. 工作在一個月內每兩週在星期一執行
- 30. 2016年1月至3月之間查找mySQL中的所有星期日
你先生,是男人! :)在1去工作!謝謝! – Sander 2011-06-15 15:14:00