鉴于一年和一年月,如何检查当月存在的特定日期

时间:2017-07-17 07:22:07

标签: ios swift calendar nsdate nsdatecomponents

我正在尝试检查一个月内是否存在特定日期。但无法找到任何帮助。举个例子,我在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"

它的作用是它试图用TimeZones操纵并移动针。因此,我无法找到一种方法来检查某个特定日期是否存在特定日期。年。 任何人都可以指导。

4 个答案:

答案 0 :(得分:10)

DateComponents具有isValidDate属性,您可以使用该属性 为此目的:

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

print(components.isValidDate) // false

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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。