Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将日期与字符串日期值进行比较_Ios_Swift_Datepicker - Fatal编程技术网

Ios 将日期与字符串日期值进行比较

Ios 将日期与字符串日期值进行比较,ios,swift,datepicker,Ios,Swift,Datepicker,我正在尝试将字符串日期转换为日期类型。但当我尝试下面给出的代码时,在比较两个日期后返回nil值,一个是从日期选择器中选择的日期,第二个是当前日期,但始终给出我的返回号 我真的很困惑如何将字符串日期转换为日期类型,在比较两个日期之后,请检查下面的代码: 代码 let currentDate = Date() let currentDformatter = DateFormatter() currentDformatter.dateFormat = "dd-MM-yyyy"

我正在尝试将字符串日期转换为日期类型。但当我尝试下面给出的代码时,在比较两个日期后返回nil值,一个是从日期选择器中选择的日期,第二个是当前日期,但始终给出我的返回号

我真的很困惑如何将字符串日期转换为日期类型,在比较两个日期之后,请检查下面的代码:

代码

    let currentDate = Date()
    let currentDformatter = DateFormatter()
    currentDformatter.dateFormat = "dd-MM-yyyy"
    let currentDateResult = currentDformatter.date(from: "\(currentDate)")
    print("Current Latest Date ",currentDateResult as Any)

    let selectedDate = Date()
    let selectedDformatter = DateFormatter()
    selectedDformatter.dateFormat = "dd-MM-yyyy"
    let selectedresult = selectedDformatter.string(from: selectedDate)
    print("Current Latest Date ",selectedresult)

    if currentDateResult == selectedDate{
        print("yes")
    }else{
        print("no")
    }
我还比较了时间,请给我一些建议,告诉我如何防止用户选择超过一定时间的时间选择器。例如,餐厅的关门时间是5点钟

代码:

CurrentDateAndTime 2019-04-15 05:00:00 +0000

SelectDateAndTime  2019-04-16 07:52:28 +0000
我不希望用户在5点后选择时间,我如何检查和比较时间


如何检查和比较时间???

有更好的方法检查两个日期是否在同一天

let currentDate = Date()
let selectedDate = Date()
if Calendar.current.isDate(currentDate, inSameDayAs: selectedDate) {
    print("yes")
} else {
    print("no")
}

您得到的
currentDateResult
nil
,因为您没有传递正确的
日期字符串
,因此需要将
日期
转换为
字符串
,然后将
字符串
传递到如下类似的位置:

let currentDateResult = currentDformatter.date(from: currentDformatter.string(from: currentDate))
否则,您可以执行与上面@vadian答案相同的操作

let currentDate = Date()
let currentDformatter = DateFormatter()
currentDformatter.dateFormat = "dd-MM-yyyy"
let currentDateResult = currentDformatter.date(from: "\(currentDate)")
print("Current Latest Date ",currentDateResult as Any)
在上面的代码中,实际上并没有将日期对象转换为字符串类型。将其插入字符串只会打印出对象及其属性。您必须将日期对象转换为字符串

let myDateInString = "22-08-2018"
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "dd-MM-yyyy"
let date = formatter.date(from: myDateInString) // Optional
let stringVal = formatter.string(from: date!)
debugPrint(stringVal)
如果要比较两个日期,可以使用:

switch date1.compare(date2) {
case .orderedSame: break // exact same
case .orderedAscending: break // date2 comes after date1 in calendar
case .orderedDescending: break // date2 comes before date1 in calendar
}

如果您只想检查两个日期是否为同一天,请使用@vadian的答案

是否确定要转换的字符串的格式为“dd-MM-yyyy”?从日期选择器中选择的日期也是一个
日期
,而不是字符串,那么,你为什么不简单地比较这两种
Date
类型呢?我也在比较时间。请告诉我如何防止用户在时间选择器中选择超过某个时间的时间。例如,像餐厅关门时间是5点钟,我不希望用户选择5点钟之后的时间,我如何检查和比较时间??您可以比较小时组件:
let hour=Calendar.current.component(.hour,from:Date())>17
您尝试过我上次评论中的建议了吗?或设置日期选择器的最小和最大日期。17用于pm,5用于am。这将检查所选日期是否在5点之后。@ShamDass是否不允许用户在每天下午5点之后选择?