在 Swift 中获取两个日期(月/日/小时/分钟/秒)之间的差异

2023-11-21

我试图将当前日期之间的差异作为NSDate()和来自 PHP 的日期time();调用例如:NSDate(timeIntervalSinceReferenceDate: 1417147270)。我如何获取两个日期之间的时间差。我想要一个比较两个日期的函数if(seconds > 60)然后返回分钟,if(minutes > 60)返回时间和if(hours > 24)回国天数等。

我该怎么办?

编辑:当前接受的答案已经完成了我想做的事情。我推荐它,因为它可以轻松使用 PHP 的形式获取两个日期之间的时间time()函数用途。如果您对 PHP 不是特别熟悉,那是从 1970 年 1 月 1 日开始的以秒为单位的时间。这对于 PHP 后端是有益的。如果您正在使用像 NodeJS 这样的后端,您可能需要考虑下面的一些其他选项。


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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Swift 中获取两个日期(月/日/小时/分钟/秒)之间的差异 的相关文章

  • 本地化现有的 iOS 应用程序

    我不敢相信以前没有人问过这个问题 要么是我的编码实践太无组织性 要么是我没有使用正确的关键字 How can I localize an existing iOS app that does not use NSLocalizedStrin
  • 打乱 NSMutableArray 而不重复并显示在 UIButton 中

    在我看来 我有 12 个按钮 一个数组包含 6 个名称 我想在其中打印数组名称UIButton标题 这是我的代码 texts NSMutableArray alloc initWithObjects 1 2 3 4 5 6 nil UIBu
  • 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

    我正在开发一个基于 Swift 的 macOS 应用程序 我需要捕获视频输入 但不将其显示在屏幕上 而不是显示视频 我想将缓冲的数据发送到其他地方进行处理 并最终显示它在 a 中的一个物体上SceneKit scene 我有一个Camera
  • 如何知道我的应用程序使用了多少 iCloud 空间?

    有没有办法查看我的应用程序正在备份到 iCloud 的内容以及它消耗了多少内存 Settings gt iCloud gt Storage Backup gt Manage Storage将显示正在备份的总计内容 iOS 会备份位于应用程序
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • GeoFire Swift 3 - 保存和更新坐标

    我正在尝试使用 GeoFire 将坐标存储到 Firebase 数据库中 我不确定如何更新新坐标 因为它们每秒都会更改 更新 随着childByAutoId 它正在为每辆自行车生成一个新的唯一 ID 如何引用这个唯一的自行车 ID 例如 用
  • 当地图视图只是屏幕的一部分时,如何在 iOS 模拟器中进行捏合?

    我在 iPad 上有一个视图 我正在添加MKMapView也就是说 全屏高度的一半 然而 当我尝试在 iOS 模拟器上进行捏合时 它不起作用 因为 to nubs 填充了模拟器上的整个 iPad 视图 And so with the map
  • 在 Xcode 5 中重命名 iOS 项目[重复]

    这个问题在这里已经有答案了 我需要重命名一个 iOS 项目 有没有办法在不开始一个全新项目的情况下做到这一点 我发现的所有其他信息都与 Xcode 4 或旧版本相关 这些方法似乎使项目崩溃 我在尝试任何名称更改之前创建了一个快照 在 Xco
  • 如何使用AudioKit保存音频文件?

    我有音频文件 我给它做了一些效果 let pitchshifter AKPitchShifter self audioPlayer pitchshifter shift 10 AudioKit output pitchshifter 如果我
  • UIButton的高亮状态由什么控制事件开始和结束

    我正在创建类似钢琴的视图UIButton作为钢琴键 什么UIControlEvents当按钮获得和失去突出显示状态时 我应该监听以获得回调吗 我试图创建子类UIButton并添加属性观察者highlighted并且运行良好 然而 有时我需要
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 将 SSLSetEnabledCiphers 与 AFNetworking 结合使用来禁用弱密码

    我正在尝试禁用一些密码 弱 例如单个 DES 单个 DES 40 位等 我尝试过使用这段代码在 Cocoa 中使用 CFSocket CFStream 时如何设置 SSL 密码 https stackoverflow com questio
  • Swift:使具有相同“形状”的两种类型符合通用协议

    我有两种不同的类型 它们代表相同的数据 并且具有完全相同的 形状 这两种不同的类型是代码生成的 我被迫处理它们 但是 我想让它们符合一个通用的协议 这样我就可以对这两种类型一视同仁 这是一个例子 假设这是我所坚持的两种代码生成类型 stru
  • 欧洲中部时间 14 日 3 月 30 日星期五 00:00:00 至 日/月/年

    我尝试解析格式日期Fri Mar 30 00 00 00 CET 14至 日 月 年 这是我的代码 SimpleDateFormat formatter new SimpleDateFormat dd MM yyyy System out
  • ios水平居中约束问题?

    I am having hard time in learning constraints auto layout in iOS I have used any width any height I have a storyboard sc
  • 根据 iOS 版本使用不同的类实现?

    iOS 11 最近添加了一个我想使用的新功能 但我仍然需要支持旧版本的 iOS 有没有一种方法可以将同一个类编写两次 并让较新版本的 iOS 使用该类的一个版本 而旧版本的 iOS 使用另一个版本 注 最初我用的是if available
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • SwiftUI:发送电子邮件

    在正常情况下UIViewController在 Swift 中 我使用此代码发送邮件 let mailComposeViewController configuredMailComposeViewController mailCompose
  • 如何在 OSX 上安装 LaTeX .sty 文件?

    我设置了一个 LaTeX 项目 tex documents some file tex support todonotes sty where some file tex uses todonotes usepackage colorinl

随机推荐

  • 在 Dart 中什么时候使用 mixins 以及什么时候使用接口?

    我非常熟悉接口和抽象类的概念 但不太熟悉mixins 现在 在 Dart 中 每个类A定义一个隐式接口 可以由另一个类实现B通过使用implements关键词 没有明确的方法来声明接口 例如在 Java 中 接口仅包含未实现的方法 最终包含
  • 将 S3(法兰克福)与 Spark 结合使用

    有人在法兰克福使用 hadoop spark 1 6 0 来使用 s3 吗 我试图将作业的结果存储在 s3 上 我的依赖项声明如下 org apache spark spark core 1 6 0 exclude org apache h
  • @ngrx 中的效果中的连锁动作

    我在发出 HTTP 请求的 Effect 中一个接一个地链接操作时遇到一些问题 效果代码如下 export class UserEffects Effect update Observable
  • Spring中的form:label标签有什么优点?

  • 在 CI 环境中编写“heroku 登录”脚本

    是否有一种受认可的方法来编写脚本或绕过 Heroku Toolbelt 的登录提示 我遇到过许多声称提供解决方案的黑客 期望环境变量 在 netrc 中插入环境变量等 但我真的很想找到一个稳定的解决方案 根据我在文档中看到的内容 可以通过三
  • Castle Windsor - 我是否必须释放单例或非一次性瞬态对象?

    The 城堡维基在几个地方说我应该始终为通过容器解析的组件调用container Release 这对于复杂的生活方式管理技术 例如 LifeStyle Pooled 或使用专门的设施时显然是有意义的 但是我真的必须释放单例 在容器被处置之
  • jQuery 通过按类搜索来获取元素的 id

    这是我的html div class head div div div class some box a div div class some box b div div div 我想使用该 div 的类 head div 获取父 div
  • 为什么调用 FnOnce 闭包是一个举动?

    我试图将一个闭包传递给一个函数 然后该函数将在函数范围内改变传递给它的某些内容 根据我目前对 Rust 的理解 应该是这样的 pub fn call something callback FnOnce mut Vec
  • 调试器无法看到 Lambda 中的局部变量

    我注意到 当我将鼠标悬停在局部变量上时 当我的调试器停止在 lambda 内时 它会报告Cannot find local variable variable name 即使它在 lambda 内部可见并且已被使用 示例代码 public
  • python argparse 设置未提供参数时的行为

    我对 python 相当陌生 并且在使用命令行参数时一直困扰着如何构建我的简单脚本 该脚本的目的是自动执行我工作中与排序和操作图像相关的一些日常任务 我可以指定参数并让它们调用相关函数 但我也想在未提供参数时设置默认操作 这是我当前的结构
  • 如何以角度模拟模块

    所以我读了很多帖子 但到目前为止还没有有效的建议 我想模拟一个模块 比如说 angular foo 原始文件与其他所有文件一起加载 angular module app angular foo 我想在我的业力 摩卡测试中模拟这个模块 我已经
  • R:在深度嵌套列表中按名称查找对象

    Problem 我认为这应该是一个常见问题 但我找不到解决方案 让我们假设一个深度嵌套的列表 例如 my list lt list first node list group a list E001 1 5 E002 list F001 6
  • 将 JSON.NET JObject 转换为 JsonResult 时出现异常

    我有一个 JSON NET JObject 其数据结构如下 foo bar baz 我试图将其转换为 ASP NET MVC JsonResult 如下所示 JObject someData JsonResult jsonResult Js
  • 快速测试目录是否为空

    测试目录是否为空的最快方法是什么 当然我可以检查的长度 list files path all files TRUE include dirs TRUE no TRUE 但这需要枚举我宁愿避免的目录的全部内容 EDIT 我正在寻找便携式解决
  • Composer 不生成库的自动加载

    我已经设置了两个项目 一个 init 和一个库 这是 init 所需的 它们都设置了 PSR 0 自动加载 但库中的自动加载值不会添加到 init 项目中的vendor composer autoload namespaces php 中
  • 为什么 Math.max(double a, double b) 不是可变参数?

    为什么 Math max 的实现不是可变参数函数 它可以像这样实现 public class Main public static double max double values double max Double NEGATIVE IN
  • 逐像素颜色转换 WriteableBitmap => 仅 PNG 黑色到透明颜色

    我正在开发一个 silverlight 应用程序 其中所有图标都是 PNG 的颜色all这些图标是黑色的 或者更确切地说是黑色到灰色的 具体取决于 Alpha 值 每个 PNG 都有透明背景 在我的应用程序中 我想要逐个像素地进行颜色更改
  • 如何知道

    如果滚动结束已到达 div 标签 我需要触发一个函数 page bind scroll function e page is the ID of the div im scrolling if document body scrollHei
  • 左侧带有箭头的微调器

    我正在开发一个 RTL 语言的应用程序 想要更改 Spinner 左侧箭头的位置 有没有办法在不创建自定义微调器的情况下执行此操作 您必须编写一个自定义微调器 示例代码如下 您可以根据需要进行编辑
  • 在 Swift 中获取两个日期(月/日/小时/分钟/秒)之间的差异

    我试图将当前日期之间的差异作为NSDate 和来自 PHP 的日期time 调用例如 NSDate timeIntervalSinceReferenceDate 1417147270 我如何获取两个日期之间的时间差 我想要一个比较两个日期的