我想执行一个日期()比较计算

我有表单的字符串返回日期:

let expirationDate "2023-11-16T10:44:00+0000

我想做以下比较:

If expirationDate - currentDate < 70h (~259200s) {
    --- implement A
} else {
   --- implement B
}

我的 idea 是将其全部转换为秒,然后进行比较

但我得到一个错误如下:

引用BinaryInteger上的运算符函数‘&lt;’要求‘CGFloat’符合‘BinaryInteger’

以下是我的代码

func updateComponents() {
    let expirationString = "2023-11-16T10:44:00+0000"
    let dateFormatter = ISO8601DateFormatter()
    let date = dateFormatter.date(from: expirationString)

    guard let date = date else { return }
    let expirationCount = date.timeIntervalSince1970
    let currentDateCount = Date().timeIntervalSince1970

    let seconds = 259200
    if expirationCount - currentDateCount < seconds {
        // implement A
    } else {
        // implement B

    }
}

推荐答案

  • 比较运算符需要两端都是同一类型.

  • Swift 推断seconds等于Int.

  • 左边的类型是TimeInterval.

  • 他们中的一个必须被改装.

你可以隐含地把seconds变成TimeInterval:

let seconds: TimeInterval = 259200

此外,您还可以使用timeIntervalSince来代替减法,如:

try! Date("2053-11-16T10:44:00+0000", strategy: .iso8601).timeIntervalSince(.now) < seconds

<⚠️请注意,您可以考虑使用calendar来计算日期之间的差异.Here is an example why

Swift相关问答推荐

SWIFT中MAP的静态方法包装器

如何在自定义视图中读取修改符子元素?

如何异步返回视图?什么?

如何使用可搜索在搜索栏中搜索包括>或<?

类型擦除`AsyncMapSequence, Element>`

Swift Property Wrappers-Initialization 失败并显示无法将‘Double’类型的值转换为预期的参数类型

如何裁剪图像 3:4 ?迅速

SwiftUI 分段 Select 器的问题

将数据附加到 Firebase 实时数据库后,NavigationLink 将我重定向到上一个视图

Reality Composer Tap Trigger 问题

如何使被拖动的对象成为前景(foreground)对象

Subclass.fetchRequest() Swift 3.0,扩展并没有真正帮助 100%?

swift:修改字典中的数组

仅在 Swift 中创建 Setter

使 struct 可散列?

如何在Swift中找出字母是字母数字还是数字

<<错误类型>> 奇怪的错误

swift 中的@property/@synthesize 类似功能

ld:入口点(_main)未定义.对于架构 x86_64:Xcode 9

如何在 iOS 上的 Swift 中获取 sharedApplication?