在一个快速的操场上,我一直在使用
NSDate.date()
但是,这总是会附加时间元素 . 对于我的应用程序,我需要忽略时间元素 . 这在Swift中可能吗?怎么做到呢?即使我可以将时间元素设置为每个日期也同时工作 .
此外,我正在尝试比较两个日期,目前我正在使用以下代码:
var earlierDate:NSDate = firstDate.earlierDate(secondDate)
这是唯一的方法,还是可以忽略时间元素的方式?例如,如果他们是同一天,但不同的时间,我不想要结果 .
15 回答
在Swift 4中:
适用于iOS7支持
使用此
Calendar
函数来比较iOS 8.0中的日期以
.day
为单位使用此功能如下:
iOS 8.0中的NSCalendar有几种有用的方法:
甚至比较日子:
要忽略time元素,可以使用:
但是,如果你还必须支持iOS 7,你总是可以写一个扩展名
我写了以下方法,通过借用Ashley Mills解决方案来比较两个日期 . 它比较两个日期,如果两个日期相同,则返回true(剥离时间) .
它被称为这样:
两个日期在swift中的比较 .
You can compare two dates using it's description.
If you want set the time element of your dates to a different time you can do as follow:
or you can also do it using NSDateFormatter:
另一个选项(iOS8)是使用日历方法isDate(inSameDayAsDate :):
For Swift3
我写了一个Swift 4扩展来比较两个日期:
用法:
startDate.isSameDateAs(endDate) // returns a true or false
迅速:
Swift 3
当你在操场上
NSDate.date()
时,你会看到 default description 已打印出来 . 使用NSDateFormatter
打印日期对象的本地化描述,可能只包含日期部分 .要将日期的特定部分清零(为了进行比较),请将
NSDateComponents
与NSCalendar
结合使用 .根据我的经验,大多数人都是正常的感觉(即在当地时区的午夜开始的24个时期) . 在正常(日常/非编程)用法中,2014年1月1日在伦敦的日期与1月1日在北京或纽约的日期相同 even though they cover different periods in real time . 为了达到极限,圣诞岛上的时间是UTC 14,而中途岛上的时间是UTC-11 . 所以2014年1月1日在这两个岛上是相同的日期,即使一个人甚至没有开始,直到另一个完成了一个小时 .
如果那是您正在录制的日期(如果您没有录制时间组件,则可能是),则不要使用NSDate(仅存储2001-01-01 00:00 UTC之后的秒数,没有其他内容)但是将年月和日存储为整数 - 也许通过创建包含这些值的CivilDate类 - 并使用它来代替 .
仅进入NSDate以比较日期,然后确保在两个NSDates上明确声明时区为“UTC”以进行比较 .
Swift iOS 8 and up 当您需要的不仅仅是更大或更小的日期比较时 . 例如,它是在同一天或前一天,......
有关如何在过滤器中使用此示例,请参阅以下答案:
https://stackoverflow.com/a/45746206/4946476
回答你的问题:
对的,这是可能的
啊,你现在也想要
现在d1和d2将包含他们日期开始的日期 .
与
d1!.compare(d2!)
比较为了显示它们没有时间部分,我们使用NSDateFormatter .