测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可 | MIT |
发布最后发布 | 2015年10月 |
由 Sebastian Ludwig 维护。
在同一个格式器中添加 "今天 2 小时前" 和 "昨天下午 4 点" 的格式
SLConditionalDateFormatter *formatter = [SLConditionalDateFormatter new];
[formatter addFormat:@"R" forTimeInterval:-3600];
[formatter addFormat:@"{HH:mm}" for:SLTimeUnitToday];
[formatter addFormat:@"I" for:SLTimeUnitYesterday];
[formatter addFormat:@"R" forLast:7 unit:SLTimeUnitDays];
formatter.defaultFormat = @"{yMd}";
[formatter stringForTimeIntervalFromDate:minutesAgo toReferenceDate:now];
// = 42 minutes ago
[formatter stringForTimeIntervalFromDate:earlierToday toReferenceDate:now];
// = 13:37
[formatter stringForTimeIntervalFromDate:yesterday toReferenceDate:now];
// = yesterday
[formatter stringForTimeIntervalFromDate:threeDaysAgo toReferenceDate:now];
// = 3 days ago
[formatter stringForTimeIntervalFromDate:longAgo toReferenceDate:now];
// = 2/11/2015
或
SLConditionalDateFormatter *formatter = [SLConditionalDateFormatter new];
[formatter addFormat:@"I R" for:SLTimeUnitToday];
[formatter addFormat:@"I at {h}" for:SLTimeUnitYesterday];
[formatter stringForTimeIntervalFromDate:twoHoursAgo toReferenceDate:now];
// = today 2 hours ago
[formatter stringForTimeIntervalFromDate:yesterdayAt4pm toReferenceDate:now];
// = yesterday at 4 PM
SLConditionalDateFormatter 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile
pod "SLConditionalDateFormatter"
(NSString *)stringForTimeIntervalFromDate:(NSDate *)date toReferenceDate:(NSDate *)referenceDate
格式化给定日期。对于相对和习惯用法格式,使用给定日期和参考日期之间的时间差。
(NSString *)stringForTimeIntervalFromDate:(NSDate *)date
也用于格式化给定日期。当前日期用作参考日期。
(NSString *)stringForTimeInterval:(NSTimeInterval)seconds
将给定的时间间隔解释为从现在起的偏移。计算出的日期将进行格式化。当前日期用作参考日期。
I
用于习惯表示法,如 "昨天" 或 "下个月"R
用于相对表示法,如 "2 周前" 或 "1 天后"RRRR
重复 7 个 R
以指定重要单位的数量。 RR
产生类似 "2 天 13 小时前" 的表达式~R
在任何 R
格式前添加 ~
以添加大约限定符,如 "大约 4 小时前",如果时间差不是准确的{HH:mm}
用于常规日期格式化。您可以使用通常在 [NSDateFormatter -setDateFormat:]
设置的任何内容。与 I
和 R
不同,这些模式需要用花括号括起来。{hm}
用于日期格式模板。只有占位符(无冒号、空格等)的日期格式模式将用作模板。模板将使用 [NSDateFormatter +dateFormatFromTemplate:options:locale:]
转换为日期格式,并考虑设置的区域设置。可以使用四种口味中的任何一种添加格式。
addFormat:(NSString *)format forTimeInterval:(NSTimeInterval)timeInterval
在给定日期和参考日期之差位于给定时间间隔的情况下添加格式。
addFormat:(NSString *)format for:(SLTimeUnit)unit
为特定时间单位添加格式。该时间单位需要是相对时间单位,例如 SLTimeUnitToday
、SLTimeUnitSameWeek
或 SLTimeNextYear
。查看头文件以获取完整列表。
addFormat:(NSString *)format forLast:(NSUInteger)count unit:(SLTimeUnit)unit
添加用于过去相对时间段的格式。时间单位应为 SLTimeUnitDays
、SLTimeUnitWeeks
、SLTimeUnitMonths
或 SLTimeUnitYears
。
addFormat:(NSString *)format forNext:(NSUInteger)count unit:(SLTimeUnit)unit
与第3条相同,但用于未来的时间段。
格式将按照它们添加的顺序进行检查。如果有两个格式满足日期的条件,则会使用首先添加的格式进行格式化。只应用一个格式。
如果没有格式匹配给定日期的条件,将使用默认格式(如果指定)。
库为许多语言提供了本地化支持[许多语言]。如果您想自定义一个字符串,只需将其添加到自己的本地化中,它将替换捆绑的翻译。
但这并不意味着本地化已经完美。请参阅如何贡献
Pod中包含了一系列单元测试,试图证明事物的工作状态。它们也很好地说明了用法。要运行它们,先克隆仓库,然后从例子目录运行 pod install
。
基于 @mattt 在FormatterKit 上的工作,以及在那里贡献的人。去看看,可能更适合您的需求。
问题和拉取请求总是受欢迎!本地化可能需要最多的改进。因此,请检查、纠正并提供翻译。以下键对于大多数语言仍然缺失
twine 用于管理单个 strings.txt 文件中的所有翻译。如果您想自己生成 .strings
文件,请从 Assets
文件夹中使用以下命令: twine generate-all-string-files strings.txt ./ --format apple --file-name SLConditionalDateFormatter.strings --create-folders --developer-language en --include-untranslated
Sebastian Ludwig,[email protected]
SLConditionalDateFormatter 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。