SLConditionalDateFormatter 1.0.0.1

SLConditionalDateFormatter 1.0.0.1

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最后发布2015年10月

Sebastian Ludwig 维护。



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

格式管理

可以使用四种口味中的任何一种添加格式。

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

    在给定日期和参考日期之差位于给定时间间隔的情况下添加格式。

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

    为特定时间单位添加格式。该时间单位需要是相对时间单位,例如 SLTimeUnitTodaySLTimeUnitSameWeekSLTimeNextYear。查看头文件以获取完整列表。

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

    添加用于过去相对时间段的格式。时间单位应为 SLTimeUnitDaysSLTimeUnitWeeksSLTimeUnitMonthsSLTimeUnitYears

  4. 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 文件。