LDOConditionalDateFormatter 1.0.3

LDOConditionalDateFormatter 1.0.3

测试已测试
语言 Obj-CObjective C
许可证 MIT
发布最新发布2017年6月

Sebastian Ludwig 维护。



  • 作者
  • Julian Raschke und Sebastian Ludwig GbR

在单个格式化器中使用 "今天 2 小时前" 和 "昨天下午 4 点"

快速开始

LDOConditionalDateFormatter *formatter = [LDOConditionalDateFormatter new];
[formatter addFormat:@"just now" forTimeInterval:-10];
[formatter addFormat:@"R" forTimeInterval:-3600];
[formatter addFormat:@"{HH:mm}" for:LDOTimeUnitToday];
[formatter addFormat:@"I" for:LDOTimeUnitYesterday];
[formatter addFormat:@"R" forLast:7 unit:LDOTimeUnitDays];
formatter.defaultFormat = @"{yMd}";

[formatter stringForTimeIntervalFromDate:secondsAgo toReferenceDate:now];
// = just now

[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

LDOConditionalDateFormatter *formatter = [LDOConditionalDateFormatter new];
[formatter addFormat:@"I R" for:LDOTimeUnitToday];
[formatter addFormat:@"I at {h}" for:LDOTimeUnitYesterday];

[formatter stringForTimeIntervalFromDate:twoHoursAgo toReferenceDate:now];
// = today 2 hours ago

[formatter stringForTimeIntervalFromDate:yesterdayAt4pm toReferenceDate:now];
// = yesterday at 4 PM

安装

LDOConditionalDateFormatter 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod "LDOConditionalDateFormatter"

字符串生成

  • (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:] 中设置的任何内容。与 IR 不同,这些模式需要用花括号括起来。
  • {hm} 用于日期格式化模板。只有占位符(没有冒号、空格等)的日期格式化模式将被用作模板。模板将使用 [NSDateFormatter +dateFormatFromTemplate:options:locale:] 转换为日期格式,并考虑设置的区域设置。

格式管理

可以使用四种风格之一添加格式。

  1. addFormat:(NSString *)format forTimeInterval:(NSTimeInterval)timeInterval

    在指定的日期和参考日期之间存在差异时,添加要使用的格式。

  2. addFormat:(NSString *)format for:(LDOTimeUnit)unit

    添加用于特定时间单位的格式。时间单位需要是相对的时间单位,例如 LDOTimeUnitTodayLDOTimeUnitSameWeekLDOTimeNextYear。请查看头文件以获取完整的列表。

  3. addFormat:(NSString *)format forLast:(NSUInteger)count unit:(LDOTimeUnit)unit

    添加过去相对时间跨度的格式。时间单位应为 LDOTimeUnitDaysLDOTimeUnitWeeksLDOTimeUnitMonthsLDOTimeUnitYears

  4. addFormat:(NSString *)format forNext:(NSUInteger)count unit:(LDOTimeUnit)unit

    与3.相同,但针对未来的时间跨度。

格式将按照添加的顺序进行检查。如果两个格式满足日期的条件,日期将以最先添加的格式进行格式化。只应用一个格式。

如果不存在与给定日期条件匹配的格式,将使用默认格式(如果指定)。

本地化

此库为许多语言提供本地化。如果您想自定义字符串,只需将其添加到自己的本地化中,它将替代捆绑的翻译。

但这并不意味着本地化已经完美。请查看如何贡献

示例

Pod中包含了一组单元测试,试图证明事情按预期进行。它们也很好说明了使用方法。要运行它们,首先克隆仓库,然后从示例目录中运行pod install

替代方案

基于@mattt在FormatterKit的工作以及所有人的贡献。去看看,可能它更适合您的需求。

贡献

问题和pull请求总是受欢迎!本地化可能需要改进最多。因此,请检查、纠正并提供翻译。以下密钥大多数语言都缺少

  • 今天
  • 本周
  • 本月
  • 本年

twine用于在单个strings.txt文件中管理所有翻译。如果您想自己重新生成.strings文件,请从Assets文件夹中运行以下命令:twine generate-all-string-files strings.txt ./ --format apple --file-name LDOConditionalDateFormatter.strings --create-folders --developer-language en --include-untranslated

作者

Sebastian Ludwig,[email protected]

许可证

LDOConditionalDateFormatter可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。