【问题标题】:Compare Date to String Date Value Swift比较日期到字符串日期值 Swift
【发布时间】:2019-04-15 06:59:48
【问题描述】:

我正在尝试将字符串日期转换为日期类型。但是当我在比较两个日期之后尝试下面给出的代码时返回 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 点之后的时间,我该如何查看和比较时间??

如何查看和比较时间??

【问题讨论】:

  • 您确定要转换的字符串是这种格式“dd-MM-yyyy”吗?
  • 从日期选择器中选择的日期也是Date,而不是字符串,那你为什么不简单地比较一下Date这两个类型呢?

标签: ios swift datepicker


【解决方案1】:

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

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

【讨论】:

  • 我也在比较时间,请给我一些建议,告诉我如何防止用户在时间选择器中选择超过特定时间的时间。例如餐厅关门时间是 5 点,我不希望用户选择 5 点之后的时间,我该如何检查和比较时间??
  • 您可以比较小时部分:let hour = Calendar.current.component(.hour, from: Date()) > 17
  • 您是否尝试过我上次评论中的建议?或者设置日期选择器的最小和最大日期。
  • 下午 17 点,上午 5 点。这将检查所选日期是否在 5 点之后。
  • @ShamDass 你不想让用户在每天下午 5 点之后选择吗?
【解决方案2】:
let currentDate = Date()
let currentDformatter = DateFormatter()
currentDformatter.dateFormat = "dd-MM-yyyy"
let currentDateResult = currentDformatter.date(from: "\(currentDate)")
print("Current Latest Date ",currentDateResult as Any)

在上面的代码中,您实际上并没有将 Date 对象转换为 String 类型。将其插入字符串只会打印出对象及其属性。您必须将日期对象转换为字符串。

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 的答案

【讨论】:

    【解决方案3】:

    您得到currentDateResultnil,因为您没有正确传递date String,因此您需要将date 转换为string,然后将string 传递到如下所示:

    let currentDateResult = currentDformatter.date(from: currentDformatter.string(from: currentDate))
    

    否则,你可以像上面@vadian回答一样做

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多