我想獲取給定月份的最後一個工作日。 我遇到this simple answer關於如何獲得1st/2nd/... weekday的效果。獲取一個月的最後一個工作日
問題是:如何獲得給定月份的最後一個工作日? 不是每個月都只有4個星期天,所以我是否要計算一個月的星期日數量,還是有更好的方法來做到這一點?
我想獲取給定月份的最後一個工作日。 我遇到this simple answer關於如何獲得1st/2nd/... weekday的效果。獲取一個月的最後一個工作日
問題是:如何獲得給定月份的最後一個工作日? 不是每個月都只有4個星期天,所以我是否要計算一個月的星期日數量,還是有更好的方法來做到這一點?
我終於想出了以下解決方案。爲了方便,我使用了NSDate-Extensions。 dayOfWeek
代表格里曆中的星期日(1)至星期六(7):
- (NSDate *)dateOfLastDayOfWeek:(NSInteger)dayOfWeek afterDate:(NSDate *)date
{
// Determine the date one month after the given date
date = [date dateByAddingMonths:1];
// Set the first day of this month
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.year = date.year;
dateComponents.month = date.month;
dateComponents.day = 1;
// Get the date and then the weekday of this first day of the month
NSDate *tempDate = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *firstDayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:tempDate];
NSInteger weekday = firstDayComponents.weekday;
// Determine how many days we have to go back to the desired weekday
NSInteger daysBeforeThe1stOfNextMonth = (weekday + 7) - dayOfWeek;
if (daysBeforeThe1stOfNextMonth > 7)
{
daysBeforeThe1stOfNextMonth -= 7;
}
NSDate *dateOfLastDayOfWeek = [tempDate dateBySubtractingDays:daysBeforeThe1stOfNextMonth];
return dateOfLastDayOfWeek;
}
有同樣的需求最近,我能想出的最好的是下面的,這是指每天要運行檢查,如果當前日期是當月的最後一個工作日:
<?php
$d = new DateObject('first day of this month', date_default_timezone());
$d->modify("+15 days");
$d->modify("first day of next month -1 weekday");
$last = date_format($d, 'd');
$today = new DateObject('today', date_default_timezone());
$today = date_format($today, 'd');
if ($today == $last) {
//bingo
}
?>
我一直在測試,到目前爲止找不到一個失敗的例子。在中間進行修改(「+ 15天」)的原因是爲了確保我們在下個月調用的開始日期不在兩個月之間,我相信這可能會失敗。
離開之前顯示的代碼顯然涵蓋了所有情況。