我试图得到之间的差异的当前日期作为NSDate()
和一个日期从PHPtime();
调用例如:NSDate(timeIntervalSinceReiscceDate:1417147270)
。我该如何计算这两个日期之间的时间差异。我想有一个函数,比较两个日期和如果(秒
我该怎么做呢?
编辑:当前被接受的答案正是我想要做的。为了便于使用,我建议使用它以PHP
time()
函数使用的形式获取两个日期之间的时间。如果您对PHP不是特别熟悉,那么从1970年1月1日开始,这是以秒为单位的时间。这对于PHP中的后端是有益的。如果您使用的是像NodeJS这样的后端,您可能需要考虑下面的其他选项。
你问:
我想有一个比较两个日期和if(秒)的函数
我假设您试图构建两个日期之间经过时间的字符串表示。苹果已经有了一个专门设计来做这件事的类,而不是编写自己的代码来做这件事。也就是说,使用DateComponentsFor事
,将alloweUnits
设置为对您的应用有意义的任何值,将unitsStyle
设置为您想要的任何值(例如. ful
),然后调用字符串(from: to:)
。
例如,在Swift 3中:
let previousDate = ...
let now = Date()
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.month, .day, .hour, .minute, .second]
formatter.maximumUnitCount = 2 // often, you don't care about seconds if the elapsed time is in months, so you'll set max unit to whatever is appropriate in your case
let string = formatter.string(from: previousDate, to: now)
这也将定位适合所讨论设备的字符串。
或者,在Swift 2.3中:
let previousDate = ...
let now = NSDate()
let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = .Full
formatter.allowedUnits = [.Month, .Day, .Hour, .Minute, .Second]
formatter.maximumUnitCount = 2
let string = formatter.stringFromDate(previousDate, toDate: now)
如果您正在寻找实际的数值,只需使用dateComponents
。例如在Swift 3中:
let components = Calendar.current.dateComponents([.month, .day, .hour, .minute, .second], from: previousDate, to: now)
或者,在Swift 2.3中:
let components = NSCalendar.currentCalendar().components([.Month, .Day, .Hour, .Minute, .Second], fromDate: previousDate, toDate: now, options: [])
如果有人需要显示所有的时间单位,例如“小时、分钟、秒”,而不仅仅是“小时”。假设两个日期之间的时间差是1小时59分20秒。该功能将显示“1h59m20s”。
这是我的Object-C代码:
extension NSDate {
func offsetFrom(date: NSDate) -> String {
let dayHourMinuteSecond: NSCalendarUnit = [.Day, .Hour, .Minute, .Second]
let difference = NSCalendar.currentCalendar().components(dayHourMinuteSecond, fromDate: date, toDate: self, options: [])
let seconds = "\(difference.second)s"
let minutes = "\(difference.minute)m" + " " + seconds
let hours = "\(difference.hour)h" + " " + minutes
let days = "\(difference.day)d" + " " + hours
if difference.day > 0 { return days }
if difference.hour > 0 { return hours }
if difference.minute > 0 { return minutes }
if difference.second > 0 { return seconds }
return ""
}
}
在Swift 3中:
extension Date {
func offsetFrom(date: Date) -> String {
let dayHourMinuteSecond: Set<Calendar.Component> = [.day, .hour, .minute, .second]
let difference = NSCalendar.current.dateComponents(dayHourMinuteSecond, from: date, to: self)
let seconds = "\(difference.second ?? 0)s"
let minutes = "\(difference.minute ?? 0)m" + " " + seconds
let hours = "\(difference.hour ?? 0)h" + " " + minutes
let days = "\(difference.day ?? 0)d" + " " + hours
if let day = difference.day, day > 0 { return days }
if let hour = difference.hour, hour > 0 { return hours }
if let minute = difference.minute, minute > 0 { return minutes }
if let second = difference.second, second > 0 { return seconds }
return ""
}
}
Xcode 8.3 Swift 3.1或更高版本
您可以使用日历来帮助您创建一个扩展来进行日期计算,如下所示:
extension Date {
/// Returns the amount of years from another date
func years(from date: Date) -> Int {
return Calendar.current.dateComponents([.year], from: date, to: self).year ?? 0
}
/// Returns the amount of months from another date
func months(from date: Date) -> Int {
return Calendar.current.dateComponents([.month], from: date, to: self).month ?? 0
}
/// Returns the amount of weeks from another date
func weeks(from date: Date) -> Int {
return Calendar.current.dateComponents([.weekOfMonth], from: date, to: self).weekOfMonth ?? 0
}
/// Returns the amount of days from another date
func days(from date: Date) -> Int {
return Calendar.current.dateComponents([.day], from: date, to: self).day ?? 0
}
/// Returns the amount of hours from another date
func hours(from date: Date) -> Int {
return Calendar.current.dateComponents([.hour], from: date, to: self).hour ?? 0
}
/// Returns the amount of minutes from another date
func minutes(from date: Date) -> Int {
return Calendar.current.dateComponents([.minute], from: date, to: self).minute ?? 0
}
/// Returns the amount of seconds from another date
func seconds(from date: Date) -> Int {
return Calendar.current.dateComponents([.second], from: date, to: self).second ?? 0
}
/// Returns the a custom time interval description from another date
func offset(from date: Date) -> String {
if years(from: date) > 0 { return "\(years(from: date))y" }
if months(from: date) > 0 { return "\(months(from: date))M" }
if weeks(from: date) > 0 { return "\(weeks(from: date))w" }
if days(from: date) > 0 { return "\(days(from: date))d" }
if hours(from: date) > 0 { return "\(hours(from: date))h" }
if minutes(from: date) > 0 { return "\(minutes(from: date))m" }
if seconds(from: date) > 0 { return "\(seconds(from: date))s" }
return ""
}
}
使用日期组件格式化程序
let dateComponentsFormatter = DateComponentsFormatter()
dateComponentsFormatter.allowedUnits = [.second, .minute, .hour, .day, .weekOfMonth, .month, .year]
dateComponentsFormatter.maximumUnitCount = 1
dateComponentsFormatter.unitsStyle = .full
dateComponentsFormatter.string(from: Date(), to: Date(timeIntervalSinceNow: 4000000)) // "1 month"
let date1 = DateComponents(calendar: .current, year: 2014, month: 11, day: 28, hour: 5, minute: 9).date!
let date2 = DateComponents(calendar: .current, year: 2015, month: 8, day: 28, hour: 5, minute: 9).date!
let years = date2.years(from: date1) // 0
let months = date2.months(from: date1) // 9
let weeks = date2.weeks(from: date1) // 39
let days = date2.days(from: date1) // 273
let hours = date2.hours(from: date1) // 6,553
let minutes = date2.minutes(from: date1) // 393,180
let seconds = date2.seconds(from: date1) // 23,590,800
let timeOffset = date2.offset(from: date1) // "9M"
let date3 = DateComponents(calendar: .current, year: 2014, month: 11, day: 28, hour: 5, minute: 9).date!
let date4 = DateComponents(calendar: .current, year: 2015, month: 11, day: 28, hour: 5, minute: 9).date!
let timeOffset2 = date4.offset(from: date3) // "1y"
let date5 = DateComponents(calendar: .current, year: 2017, month: 4, day: 28).date!
let now = Date()
let timeOffset3 = now.offset(from: date5) // "1w"
问题内容: 我试图获取当前日期与PHP 调用中的日期之间的差异,例如:。如何获得两个日期之间的时间差。我想有一个比较两个日期的函数,然后返回分钟,返回小时和返回天等等。 我应该怎么做? 编辑:当前接受的答案已经完全做了我想要做的。我建议您以方便使用的方式获取它,以便以PHP 函数使用的形式获取两个日期之间的时间。如果您对PHP不太熟悉,那么这是从1970年1月1日开始的秒数。这对于PHP后端非常有
问题内容: 我正在为员工开发时间管理系统。 我想要持续时间员工迟到多少时间,或者他早到了多少时间。 我有以下结构。 我想要迟到的报告(即谁在ActualInTime之后的清晨到达,并且在hh:mm:ss中持续了多少时间),并且还想要提早去(即谁在格式为hh:mm:ss的持续时间中在ActualOutTime之前的傍晚去了) 那你能帮我吗。??? 问题答案: 此代码可能会帮助您…
嗯,我在这里发现了很多这样的问题,试图获得年、月和日的两个日期之间的差异。。。但没有满足我要求的答案。 所以我写了一些计算的东西,它似乎是有效的,但也许这里的一些专家可以进行更正,或者帮助使这更简单。
问题内容: 如果我有两个日期,我该如何使用JavaScript以分钟为单位获取两个日期之间的差额? 问题答案: 您可以签出以下代码: 或舍弃秒,如果您不想舍入分钟。
我可以使用MomentJs获得两个日期之间的差异,如下所示: 但是,我还想在适用的情况下显示小时(仅当>=60分钟过去时)。 但是,当我尝试使用以下命令检索持续时间小时数时: 它返回的是当前小时,而不是两个日期之间的小时数。 我如何得到两个时刻之间的小时差?
问题内容: 我试图在几秒钟之内得到两个日期之间的差异。逻辑将是这样的: 设置一个初始日期,即现在; 设置最终日期,该日期将是初始日期加上将来的秒数(例如,假设15) 得到这两者之间的差(秒数) 之所以使用日期来做,是因为最终日期/时间取决于其他一些变量,并且永远不一样(取决于用户执行操作的速度),并且我还存储其他日期的初始日期。 我一直在尝试这样的事情: 问题是我永远都不会得到正确的区别。我尝试过