Luxon日期时间格式化全指南:从基础到高级应用

Luxon日期时间格式化全指南:从基础到高级应用

luxon ⏱ A library for working with dates and times in JS luxon 项目地址: https://gitcode.com/gh_mirrors/lu/luxon

一、格式化概述

在Luxon日期时间库中,格式化功能是将DateTime对象转换为可读字符串的核心能力。根据使用场景的不同,Luxon提供了三种主要格式化方式:

  1. 技术格式:面向计算机系统的标准化格式(如ISO 8601)
  2. 本地化格式:面向终端用户的国际化友好格式
  3. 令牌格式:开发者自定义的灵活格式

二、技术格式(机器可读)

2.1 ISO 8601标准格式

ISO 8601是日期时间表示的国际标准,Luxon提供了多种变体:

dt.toISO();        // 完整ISO格式:'2017-04-20T11:32:00.000-04:00'
dt.toISODate();    // 仅日期部分:'2017-04-20'
dt.toISOWeekDate();// 周数格式:'2017-W17-7'
dt.toISOTime();    // 仅时间部分:'11:32:00.000-04:00'

最佳实践:在API交互和数据传输中优先使用toISO()

2.2 传统格式支持

虽然不推荐,但Luxon仍支持一些传统格式:

dt.toRFC2822(); // RFC 2822格式:'Thu, 20 Apr 2017 11:32:00 -0400'
dt.toHTTP();    // HTTP日期头格式:'Thu, 20 Apr 2017 03:32:00 GMT'

2.3 Unix时间戳

获取不同精度的Unix时间戳:

dt.toMillis();     // 毫秒时间戳:1492702320000
dt.toSeconds();    // 秒时间戳(带小数):1492702320.000
dt.toUnixInteger();// 整数秒时间戳:1492702320

三、本地化格式(人类可读)

3.1 基础用法

利用浏览器内置的国际化API生成友好格式:

dt.toLocaleString(); // 默认短格式:'4/20/2017'
dt.toLocaleString(DateTime.DATETIME_FULL); // 完整格式:'April 20, 2017 at 11:32 AM EDT'

3.2 国际化支持

通过设置locale实现多语言支持:

dt.setLocale('fr').toLocaleString(DateTime.DATETIME_FULL);
// 输出:'20 avril 2017 à 11:32 UTC−4'

3.3 预设格式详解

Luxon提供了丰富的预设格式(以1983年10月14日13:30:23为例):

| 预设名称 | 英文示例 | 法语示例 | |--------------------------|----------------------------------|--------------------------------| | DATE_SHORT | 10/14/1983 | 14/10/1983 | | DATE_FULL | October 14, 1983 | 14 octobre 1983 | | TIME_WITH_SECONDS | 1:30:23 PM | 13:30:23 | | DATETIME_HUGE | Friday, October 14, 1983 at...| vendredi 14 octobre 1983... |

技巧:可以通过扩展预设创建自定义格式:

const customFormat = {...DateTime.DATE_SHORT, weekday: 'long'};
dt.toLocaleString(customFormat); // 'Thursday, 4/20/2017'

四、令牌格式化(高级定制)

4.1 基本语法

当预设格式无法满足需求时,可以使用toFormat方法:

dt.toFormat('yyyy LLL dd'); // '2014 Aug 06'

4.2 国际化处理

需显式设置locale才能获得本地化输出:

dt.setLocale('fr').toFormat('yyyy LLL dd'); // '2014 août 06'

4.3 转义字符

使用单引号处理文本内容:

dt.toFormat("HH '时' mm '分'"); // '13时30分'

4.4 完整令牌表

| 令牌 | 说明 | 示例 | |-------|----------------------|------------| | SSS | 毫秒(3位) | 054 | | mm | 分钟(2位) | 07 | | HH | 24小时制(2位) | 13 | | ZZZ | 时区偏移 | +0500 | | LLLL| 完整月份名 | August | | yyyy| 完整年份 | 2014 | | ccc | 星期缩写 | Wed |

4.5 宏令牌

组合多个组件的快捷方式:

dt.toFormat('ff'); // 'Aug 6, 2014, 1:07 PM'

五、最佳实践建议

  1. 机器通信:优先使用toISO()
  2. 用户界面:优先使用toLocaleString()
  3. 特殊需求:考虑使用toFormat()
  4. 性能考虑:重复使用格式对象而非每次创建
  5. 时区处理:始终明确指定输出时区

通过掌握这些格式化技巧,您可以轻松应对各种日期时间显示需求,从简单的日期展示到复杂的国际化场景都能游刃有余。

luxon ⏱ A library for working with dates and times in JS luxon 项目地址: https://gitcode.com/gh_mirrors/lu/luxon

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高崴功Victorious

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值