【问题标题】:How do i get day difference between 2 dates?我如何获得两个日期之间的日差?
【发布时间】:2019-09-27 03:13:19
【问题描述】:

我有下面的代码来计算两个日期之间的天数差异。第一个视图是我从 UIDatePicker() 中选择一个日期,按一个按钮转到第二个视图并计算所选日期和今天日期之间的天数差异,并将结果传递给第二个视图被显示。

我只是无法让计算时差的函数起作用。我做错了什么吗? 我很抱歉,因为我刚刚开始快速学习。

在我的代码上

Calendar.current.dateComponents([.day], from: self.GetDate,to: datePicker.date).day!

我在下面收到此错误

类型 'Any' 没有成员 'day'

-

第一次观看。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var dateInput: UITextField!
    let datePicker = UIDatePicker()

    var GetDate = ""


    override func viewDidLoad() {
        super.viewDidLoad()
        CreateDatePicker()
    }

    // Create Date
    func CreateDatePicker() {
        datePicker.datePickerMode = .date
        dateInput.inputView = datePicker
        let toolbar = UIToolbar()
        toolbar.sizeToFit()
        let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(doneClicked))
        toolbar.setItems([doneButton], animated: true)
        dateInput.inputAccessoryView = toolbar
    }

    @objc func doneClicked() {
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .medium
        dateFormatter.timeStyle = .none
        dateInput.text = dateFormatter.string(from: datePicker.date)
        self.view.endEditing(true)
    }


    @IBAction func GetDateButton(_ sender: Any) {
        self.GetDate = dateInput.text!
        performSegue(withIdentifier: "toTime", sender: self)
        Calendar.current.dateComponents([.day], from: self.GetDate,to: datePicker.date).day!
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc = segue.destination as! timeDiffr
        vc.textDisplay = self.GetDate
    }
}

第二个视图

import Foundation
import UIKit

class timeDiffr: UIViewController {

    @IBOutlet weak var labeltext: UILabel!

    var textDisplay = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        labeltext.text = textDisplay
    }

}

【问题讨论】:

  • 最好将您的问题集中在一个问题上。请更新您的问题,以便仅与尝试使用 dateComponents 时的错误有关。
  • from 参数需要一个Date。你正试图给它一个String。
  • @rmaddy 怎么能在没有看到全貌的情况下找出问题?此外,问题仅在于这条线,因为我正在努力寻找解决方案。我注意到我在传递字符串,但我丢失了传递的日期。即使使用 datePicker 也不起作用。
  • Calendar.current.dateComponents([.day], from: self.GetDate,to: datePicker.date).day! ,请注意from 应该是Date 的实例,而不是String @MustafaAljaburi
  • @MustafaAljaburi 您可以将该字符串转换为日期并传递,而不是传递字符串。 dateComponents 方法需要 2 个日期,因此您需要传递 Date 而不是字符串

标签: ios swift


【解决方案1】:

您应该注意您的编码约定

  • 变量,函数名应该是驼峰式:GetDate应该是getDate,GetDateButton应该是getDateButton,CreateDatePicker应该是createDatePicker

您的getDate 是一个字符串,而Calendar.current.dateComponents([.day], from: self.GetDate,to: datePicker.date).day! 返回一个int 值。这就是你需要解决的问题。

你的GetDateButton函数应该是:

@IBAction func GetDateButton(_ sender: Any) {
    // Get distance by day (intValue)
    let distanceInDay = Calendar.current.dateComponents([.day], from: Date(), to: datePicker.date).day!
}

【讨论】:

  • 关于骆驼案。这就像我在测试这个特定问题的游乐场,我需要在实施最终项目的解决方案之前找到解决方案,这肯定会有所不同。对于getDate,我注意到我传递了一个字符串,但即使使用“ Calendar.current.dateComponents([.day], from: datePicker,to: Date).day!”不管用。对不起,我只是快速练习和学习。
  • Calendar.current.dateComponents([.day], from: self.GetDate,to: datePicker.date).day! ,请注意 from 应该是 Date 的实例,而不是 String @MustafaAljaburi
  • 顺便说一句,没问题,只是想帮助你从一开始就有一个好的编码约定:) @MustafaAljaburi
  • 我已经更新了我的答案。你可以像这样获得一天中的距离(intValue),如果你想要一个字符串,然后将distanceInDay转换为字符串(例如:let stringValue = String(distanceInDay)@MustafaAljaburi
猜你喜欢
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
相关资源
最近更新 更多