【问题标题】:If today's date is between 2 different dates in SwiftUI如果今天的日期在 SwiftUI 中的两个不同日期之间
【发布时间】:2021-07-24 21:30:09
【问题描述】:

我想看看今天的日期是否在两个日期之间。如果今天的日期在某些日期之间,它会改变变量的值。

例如:

var p = 5

if viewModel.currentTime > "2021-04-23" && viewModel.currentTime < "2021-05-23"
{
    p = 2
}

这就是我想要实现的目标,但使用的是 SwiftUI 语言,但我不知道该怎么做。

我正在考虑使用 if 语句,但这不起作用。我有这门课可以得到今天的日期。

    @Published var currentTime = ""
    
    var timer = Timer()
    
    init() {
        let repeatEveryXSeconds: TimeInterval = 1
        timer = Timer.scheduledTimer(withTimeInterval: repeatEveryXSeconds, repeats: true, block: { [weak self] timer in
            let formatter = DateFormatter()
            formatter.dateFormat = "YYYY-MM-dd"
            self?.currentTime = formatter.string(from: Date())
        })
    }
}
struct Dates: View {
    
@StateObject private var viewModel = ViewModel()

我需要一些帮助或建议来完成这项任务。

如果有任何混淆,请告诉我。这有点难以解释。

更新:

这是我得到的错误:

【问题讨论】:

  • 您不能在结构的顶层运行此代码。把它放在一个函数中或者把它移到定时器类中
  • 我把它放在一个函数中并且它工作了,但是我怎样才能返回 p 的值呢?
  • 在函数中声明一个返回值,但只返回比较结果可能更有用
  • like this func pval() -> Int { p = 1 let now = Date() let day1 = Date.parse("2021-04-23") let day2 = Date.parse(" 2021-05-23") 如果现在 > day1 && now
  • 是的,但我会这样做 func pval() -&gt; Bool {let now = Date() let day1 = Date.parse("2021-04-23") let day2 = Date.parse("2021-05-23") return now &gt; day1 &amp;&amp; now &lt; day2 } 和其他地方 p = pval() ? 2 : 1

标签: xcode swiftui xcode12


【解决方案1】:

DateComparable,因此您可以使用 来比较您的日期。关键是使用Date 类型执行所有逻辑,然后格式化结果。您可以使用以下函数在Date's 和String's 之间进行转换。

public extension Date {

    static func parse(_ string: String, format: String = "yyyy-MM-dd") -> Date {
        let dateFormatter = DateFormatter()
        dateFormatter.timeZone = NSTimeZone.default
        dateFormatter.dateFormat = format

        let date = dateFormatter.date(from: string)!
        return date
    }

    func dateString(_ format: String = "yyyy-MM-dd") -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        return dateFormatter.string(from: self)
    }
}
var p = 5
let now = Date()
let day1 = Date.parse("2021-04-23")
let day2 = Date.parse("2021-05-23")

if now > day1 && now < day2 {
    p = 2
}
print(p) // prints 2 as of May 1, 2021

【讨论】:

  • 这是有道理的。你知道如何实现这个 if 语句吗?
  • @CodeBeast 使用 if 语句示例编辑原始答案。
  • 非常感谢,我会把它放在 var 正文之前还是之后?我收到一条错误消息,提示预期声明
  • @CodeBeast 不清楚你所说的“var body”是什么意思。我也不清楚您为什么在代码示例中使用Timer。您可以通过调用Date() 来获取当前日期/时间,请注意上例中的let now = Date()。您的视图模型通常负责将 Date 格式化为用户友好的表示形式(例如字符串)。
  • 我之前使用过日期,但是直到我刷新应用程序后日期才更新。所以我改用了一个计时器,这样它就可以不断更新
猜你喜欢
  • 2021-08-31
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多