2017-07-17 93 views
2

我正在嘗試檢查某個特定日期是否存在於一個月中。但無法找到任何幫助。舉個例子,我在Playground的代碼中嘗試下面的代碼;鑑於年份和月份,如何檢查當月是否存在某個特定日期

var components = DateComponents() 
components.month = 2 
components.year = 2016 
components.day = 30 
components.calendar = Calendar.current 

components.date 

這給出了答案;

"Mar 1, 2016, 12:00 AM" 

所以它所做的就是試圖用時區操縱並移動指針。因此,我無法找到一種方法來檢查特定日期是否存在於給定月份&年。 任何人都可以請指導。

回答

4

DateComponentsisValidDate屬性,您可以使用 用於這一目的:

var components = DateComponents() 
components.month = 2 
components.year = 2016 
components.day = 30 
components.calendar = Calendar.current 

print(components.isValidDate) // false 
+0

謝謝你的答案,但我在這裏已經一個問題。 Components.date被聲明爲Optional,但爲什麼它將日期而不是返回nil。 –

+0

@RameswarPrasad:如果未設置「components.calendar」,則「components.date」爲零。我不知道是否有其他情況返回零。一般來說,它會「繞過」以獲得有效的日期。 DateFormatter具有'isLenient'屬性來控制該行爲,但DateComponents不具有這樣的屬性。 –

0

讓我們打破這種下降到 -

如何檢查一個月,一年的天數?

然後你的問題歸結爲檢查給定的日期是否在[1,numDaysInMonthYear)範圍內。

上面的代碼是這樣的:

// Swift 2: 
let range = calendar.rangeOfUnit(.Day, inUnit: .Month, forDate: date) 
// Swift 1.2: 
let range = calendar.rangeOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitMonth, forDate: date) 

let numDaysInMonthYear = range.length 
print(numDaysInMonthYear) // 31 

學分:How do I find the number of days in given month and year using swift

0

試試這個方法下面你可以檢查特殊的日子在一個月的存在。

function checkDayIsExist(year:Int,month:Int,day:Int) -> Bool { 

    let dateComponents = DateComponents(year: year, month: month) 
    let calendar = Calendar.current 
    let date = calendar.date(from: dateComponents)! 

    let numberOfDays = calendar.range(of: .day, in: .month, for: date)! 
    return numberOfDays.count >= day 
} 

打電話

print(checkDayIsExist(year:2017,month:7,day:31)) // true 
0

您可以檢查通過使用NSDateFormatter/DateFormatter

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd MM yyyy" 

let dateString = "30 02 2017" 

if let date = dateFormatter.date(from: dateString) 
{ 
    print("Date \(date)") 
} 
else 
{ 
    print("Date not existed") 
} 

您可以根據您輸入的字符串更改日期格式的dateFormate。

相關問題