ion-datetime
日期时间组件提供一个日历界面和时间滚轮,使用户可以轻松选择日期和时间。日期时间组件类似于原生 datetime-local 类型的 input 元素,但 Ionic Framework 的 Datetime 组件可以轻松地以首选格式显示日期和时间,并管理日期时间值。
概述
从历史上看,在 JavaScript 或 HTML 输入中处理日期时间值一直是一项挑战。具体来说,JavaScript 的 Date 对象在正确解析日期时间字符串或格式化日期时间值方面非常困难。更糟糕的是,不同浏览器和 JavaScript 版本对各种日期时间字符串的解析方 式不同,尤其是在不同语言环境下。
幸运的是,Ionic Framework 的日期时间输入组件经过精心设计,使开发人员可以避免常见的陷阱,轻松操作日期时间值,并为用户提供简单易用的日期时间选择器,以获得良好的用户体验。
ISO 8601 日期时间格式: YYYY-MM-DDTHH:mmZ
Ionic Framework 使用 ISO 8601 日期时间格式
作为其值。该值是一个简单的字符串,而不是使用 JavaScript 的
Date 对象。使用 ISO 日期时间格式可以方便地在 JSON 对象和数据库中进行序列化和解析。
以下是一些可用于 ion-datetime 的 ISO 8601 格式示例:
| 描述 | 格式 | 日期时间值示例 |
|---|---|---|
| Year | YYYY | 1994 |
| Year and Month | YYYY-MM | 1994-12 |
| Complete Date | YYYY-MM-DD | 1994-12-15 |
| Date and Time | YYYY-MM-DDTHH:mm | 1994-12-15T13:47 |
| UTC Timezone | YYYY-MM-DDTHH:mm:ssZ | 1994-12-15T13:47:20Z |
| Timezone Offset | YYYY-MM-DDTHH:mm:ssTZD | 1994-12-15T13:47:20+05:00 |
| Hour and Minute | HH:mm | 13:47 |
注意年份始终为四位数字,毫秒(如果添加)始终为三位数字,所有其他字段始终为两位数字。因此,表示一月的数字始终带有前导零,例如 01。此外,小时始终采用 24 小时制,因此 00 表示 12 小时制中的 12am,13 表示 1pm,23 表示 11pm。
虽然可以使用 ISO 8601 日期时间格式指定秒、毫秒和时区,但 ion-datetime 不提供秒、毫秒和时区选择的界面。提供的任何秒、毫秒或时区值都将被忽略。
基本用法
与 Datetime Button 配合使用
如果需要在模态框或弹出框等覆盖层中展示日期时间,我们建议使用 ion-datetime-button。当空间受限时,应使用 ion-datetime-button。该组件显示当前日期和时间值的按钮。点击按钮时,日期或时间选择器会在覆盖层中打开。
异步设置值
如果在其 value 已被创建后通过编程方式更新,日期时间组件会自动跳转到新的日期。但是,建议避免在用户与日期时间组件交互时以这种方式更新 value,因为这可能会让正在尝试选择日期的用户感到困惑。例如,如果日期时间组件的 value 是通过异步过程加载的,建议在值更新完成之前使用 CSS 隐藏该日期时间组件。
日期约束
最大值和最小值日期
要自定义最小和最大日期时间值,可以提供 min 和 max 组件属性,这些属性可能更适合应用的使用场景。遵循上表中列出的 ISO 8601 格式,每个组件可以限制用户可以选择哪些日期。
以下示例将日期选择限制为仅 2022 年 3 月到 2022 年 5 月。
选择特定值
min 和 max 属性允许将日期选择限制在特定范围内,而 monthValues、dayValues、yearValues、hourValues 和 minuteValues 属性允许选择用户可以选择的特定日期和时间。
以下示例允许以 15 分钟为增量选择分钟,也允许以 5 天为增量选择日期。
高级日期约束
使用 isDateEnabled 属性,开发人员可以自定义 ion-datetime,使用 ISO 8601 日期字符串禁用特定日期、日期范围、周末或任何自定义规则。
isDateEnabled 属性接受一个返回布尔值的函数,指示日期是否启用。该函数为每个渲染的日历日调用,包括上个月、当前月和下个月。自定义实现应针对性能进行优化,以避免卡顿。
以下示例展示了如何禁用所有周末日期。对于更高级的日期操作,我们建议使用 date-fns 等日期工具库。
本地化
Ionic Framework 利用 Intl.DatetimeFormat Web API,该 API 允许我们根据用户设备上设置的语言和区域自动本地化月份和日期名称。
自定义区域设置
如果需要特定的区域设置,可以使用 locale 属性进行设置。区域设置控制显示的语言以及日期和时间格式。
以下示例展示了如何将区域设置为西班牙语(西班牙)。
时间标签不会自动本地化。更多信息请参阅时间标签。
小时制
ion-datetime 默认将使用由 locale 属性指定的小时制。例如,如果 locale 设置为 en-US,则 ion-datetime 将使用 12 小时制。
有 4 种主要的小时制类型:
| 小时制类型 | 描述 |
|---|---|
'h12' | 使用 1–12 的小时系统;对应模式中的 'h'。12 小时制,午夜从 12:00 am 开始。 |
'h23' | 使用 0–23 的小时系统;对应模式中的 'H'。24 小时制,午夜从 0:00 开始。 |
'h11' | 使用 0–11 的小时系统;对应模式中的 'K' |