DataTime
ion-datetime
DateTime组件用于显示一个界面,方便用户选择日期和时间。 点击<ion-datetime>将显示从页面底部向上滑动的选择器界面。 选择器然后显示可滚动列,可用于单独选择年,月,日,小时和分钟值。 DateTime组件类似于native <input type =“datetime-local”>元素,但是,Ionic的DateTime组件可以轻松地以优选格式显示日期和时间,并管理datetime值。
<ion-item>
<ion-label>Date</ion-label>
<ion-datetime displayFormat="MM/DD/YYYY" [(ngModel)]="myDate"></ion-datetime>
</ion-item>
Display 和 Picker Formats
DateTime组件在两个位置显示值:在<ion-datetime>组件中,以及从屏幕底部显示的界面。 下表列出了可以使用的所有格式。
格式 | 描述 | 栗子 |
---|---|---|
YYYY |
Year, 4 digits | 2018 |
YY |
Year, 2 digits | 18 |
M |
Month | 1 ...12 |
MM |
Month, leading zero | 01 ...12 |
MMM |
Month, short name | Jan |
MMMM |
Month, full name | January |
D |
Day | 1 ...31 |
DD |
Day, leading zero | 01 ...31 |
DDD |
Day, short name | Fri |
DDDD |
Day, full name | Friday |
H |
Hour, 24-hour | 0 ...23 |
HH |
Hour, 24-hour, leading zero | 00 ...23 |
h |
Hour, 12-hour | 1 ...12 |
hh |
Hour, 12-hour, leading zero | 01 ...12 |
a |
12-hour time period, lowercase | ampm |
A |
12-hour time period, uppercase | AMPM |
m |
Minute | 1 ...59 |
mm |
Minute, leading zero | 01 ...59 |
s |
Second | 1 ...59 |
ss |
Second, leading zero | 01 ...59 |
Z |
UTC Timezone Offset | Z or +HH:mm or -HH:mm |
重要提示:请参阅下面的月份名称和星期名称部分,了解如何使用不同的月份和日期。
Display Format
display Format input 属性指定在ion-datetime组件中如何打印datetime的值作为格式化文本。
在下面的示例中,<ion-datetime>中的显示将使用月份的短名称,数字日,前导零,逗号和四位数年份。 除了日期,它将以24小时格式和分钟显示时间。 任何字符都可以用作分隔符。 使用此格式的示例显示为:2005年6月17日11:06。
<ion-item>
<ion-label>Date</ion-label>
<ion-datetime displayFormat="MMM DD, YYYY HH:mm" [(ngModel)]="myDate"></ion-datetime>
</ion-item>
Picker Format
picker Format 输入属性确定在界面中应显示哪些列,列的顺序以及每列中使用的格式。 如果没有提供pickerFormat输入,那么它将默认为displayFormat。
在以下示例中,<ion-datetime>中的显示将使用MM / YYYY格式,例如06/2020。 但是,选择器界面将显示两个月份的长名称和四位数年份。
<ion-item>
<ion-label>Date</ion-label>
<ion-datetime displayFormat="MM/YYYY" pickerFormat="MMMM YYYY" [(ngModel)]="myDate"></ion-datetime>
</ion-item>
Datetime Data
从历史上看,JavaScript内部甚至HTML输入中处理datetime值一直是一个挑战。 具体来说,JavaScript的Date对象是非常难以正确解析datetime字符串或格式化datetime值。 更糟糕的是,不同的浏览器和JavaScript版本会不同地分析各种日期时间字符串,特别是每个语言环境。
但不用担心,一切都不会迷失! Ionic的datetime输入设计使开发人员可以避免常见的陷阱,允许开发人员轻松地在输入内格式化日期时间值,并为用户提供一个简单的日期时间选择器,实现极好的用户体验。
ISO 8601日期时间格式:YYYY-MM-DDTHH:mmZ
Ionic使用ISO 8601 datetime格式作为其值。 该值只是一个字符串,而不是使用JavaScript的Date对象。 另外,当使用ISO日期时间格式时,可以更容易地在JSON对象中进行序列化和传递,并将数据库发送到标准化格式,如果需要,可以轻松解析。
Description | Format | Datetime Value Example |
---|---|---|
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:ssTZD | 1994-12-15T13:47:20.789Z |
Timezone Offset | YYYY-MM-DDTHH:mm:ssTZD | 1994-12-15T13:47:20.789+5:00 |
Hour and Minute | HH:mm | 13:47 |
Hour, Minute, Second | HH:mm:ss | 13:47:20 |
请注意,年份始终为四位数,毫秒(如果添加)始终为三位数,所有其他数字始终为两位数。 所以代表1月份的数字总是有零的,如01.另外,小时总是以24小时格式,所以00是12点钟,12点钟,13表示下午1点,23表示晚上11点。
同样重要的是要注意,displayFormat或pickerFormat都不能设置datetime值的输出,它是由组件的ngModel设置的值。 格式仅用于将值显示为文本和选择器的界面,但datetime的值始终保持为有效的ISO 8601 datetime字符串。
Min 和 Max Datetimes
日期在任一方向是无限的,因此对于用户的选择,至少应该限制某些可以选择的日期的形式。 默认情况下,最大日期为当前年底,最小日期为100年前的年初。
要定制最小和最大日期时间值,可以提供最小和最大成分输入,这可能对应用程序的用例更有意义,而不是过去100年的默认值。 按照上表中列出的相同的IS0 8601格式,每个组件可以限制用户可以选择哪些日期。 以下是限制2016年初至2020年10月31日期间的日期选择的示例:
<ion-item>
<ion-label>Date</ion-label>
<ion-datetime displayFormat="MMMM YYYY" min="2016" max="2020-10-31" [(ngModel)]="myDate">
</ion-datetime>
</ion-item>
Month Names 和 Day of the Week Names
目前,根据语言或语言环境,自动选择月份名称或星期几名称的正确语言/拼写没有一个大小合适的标准。 好消息是,大多数浏览器都采用了Intl.DateTimeFormat标准。 然而,目前这个标准并没有被所有流行的浏览器完全实现,所以Ionic不可能利用它。 此外,Angular还提供国际化服务,但仍处于沉重的发展阶段,所以Ionic目前不依赖于它。
所有考虑的事情,最简单的解决方案是提供一系列的名称,如果应用程序需要使用除默认英文版本的月份和日期名称之外的名称。 月份名称和日期名称可以在应用程序级别或单独的离子日期时间级别进行配置。
App Config Level
//app.module.ts
@NgModule({
...,
imports: [
IonicModule.forRoot(MyApp, {
monthNames: ['janeiro', 'fevereiro', 'mar\u00e7o', ... ],
monthShortNames: ['jan', 'fev', 'mar', ... ],
dayNames: ['domingo', 'segunda-feira', 'ter\u00e7a-feira', ... ],
dayShortNames: ['dom', 'seg', 'ter', ... ],
})
],
...
})
Component Input Level
<ion-item>
<ion-label>Período</ion-label>
<ion-datetime displayFormat="DDDD MMM D, YYYY" [(ngModel)]="myDate"
monthNames="janeiro, fevereiro, mar\u00e7o, ..."
monthShortNames="jan, fev, mar, ..."
dayNames="domingo, segunda-feira, ter\u00e7a-feira, ..."
dayShortNames="dom, seg, ter, ..."></ion-datetime>
</ion-item>
Advanced Datetime Validation 和 Manipulation
datetime选择器提供了选择精确格式的简单性,并使用标准化的ISO 8601日期时间格式将datetime值作为字符串保留。 但是,请注意,在验证和操作datetime值时,ion-datetime不会尝试解决所有的配置。 如果datetime值需要从某种格式解析,或者被操作(比如添加5天到一个日期,减去30分钟等等),甚至将数据格式化到特定的区域,那么我们强烈建议您使用moment.js “在JavaScript中解析,验证,操作和显示日期”。 Moment.js在JavaScript中处理数据时间时,迅速成为我们的goto标准,但是由于大多数应用程序不需要它,因此Ionic不会预先包装此依赖关系,而且其区域设置应由最终开发者决定。
使用
<ion-item>
<ion-label>Date</ion-label>
<ion-datetime displayFormat="MM/DD/YYYY" [(ngModel)]="myDate">
</ion-datetime>
</ion-item>
效果:
实例成员
validate()
输入属性
Attr | Type | Details | |
---|---|---|---|
cancelText | string |
The text to display on the picker's cancel button. Default:Cancel . |
|
dayNames | array |
Full day of the week names. This can be used to provide locale names for each day in the week. Defaults to English. | |
dayShortNames | array |
Short abbreviated day of the week names. This can be used to provide locale names for each day in the week. Defaults to English. | |
dayValues | `array | string` | Values used to create the list of selectable days. By default every day is shown for the given month. However, to control exactly which days of the month to display, thedayValues input can take either an array of numbers, or string of comma separated numbers. Note that even if the array days have an invalid number for the selected month, like31 in February, it will correctly not show days which are not valid for the selected month. |
disabled | boolean |
If true, the user cannot interact with this element. | |
displayFormat | string |
The display format of the date and time as text that shows within the item. When thepickerFormat input is not used, then thedisplayFormat is used for both display the formatted text, and determining the datetime picker's columns. See thepickerFormat input description for more info. Defaults toMMM D, YYYY . |
|
doneText | string |
The text to display on the picker's "Done" button. Default:Done . |
|
hourValues | `array | string` | Values used to create the list of selectable hours. By default the hour values range from0 to23 for 24-hour, or1 to12 for 12-hour. However, to control exactly which hours to display, thehourValues input can take either an array of numbers, or string of comma separated numbers. |
max | string |
The maximum datetime allowed. Value must be a date string following theISO 8601 datetime format standard,1996-12-19 . The format does not have to be specific to an exact datetime. For example, the maximum could just be the year, such as1994 . Defaults to the end of this year. |
|
min | string |
The minimum datetime allowed. Value must be a date string following theISO 8601 datetime format standard, such as1996-12-19 . The format does not have to be specific to an exact datetime. For example, the minimum could just be the year, such as1994 . Defaults to the beginning of the year, 100 years ago from today. |
|
minuteValues | `array | string` | Values used to create the list of selectable minutes. By default the mintues range from0 to59 . However, to control exactly which minutes to display, theminuteValues input can take either an array of numbers, or string of comma separated numbers. For example, if the minute selections should only be every 15 minutes, then this input value would beminuteValues="0,15,30,45" . |
monthNames | array |
Full names for each month name. This can be used to provide locale month names. Defaults to English. | |
monthShortNames | array |
Short abbreviated names for each month name. This can be used to provide locale month names. Defaults to English. | |
monthValues | `array | string` | Values used to create the list of selectable months. By default the month values range from1 to12 . However, to control exactly which months to display, themonthValues input can take either an array of numbers, or string of comma separated numbers. For example, if only summer months should be shown, then this input value would bemonthValues="6,7,8" . Note that month numbers do_not_have a zero-based index, meaning January's value is1 , and December's is12 . |
pickerFormat | string |
The format of the date and time picker columns the user selects. A datetime input can have one or many datetime parts, each getting their own column which allow individual selection of that particular datetime part. For example, year and month columns are two individually selectable columns which help choose an exact date from the datetime picker. Each column follows the string parse format. Defaults to usedisplayFormat . |
|
pickerOptions | any |
Any additional options that the picker interface can accept. See thePicker API docsfor the picker options. | |
placeholder | string |
The text to display when there's no date selected yet. Using lowercase to match the input attribute | |
yearValues | `array | string` | Values used to create the list of selectable years. By default the year values range between themin andmax datetime inputs. However, to control exactly which years to display, theyearValues input can take either an array of numbers, or string of comma separated numbers. For example, to show upcoming and recent leap years, then this input's value would beyearValues="2024,2020,2016,2012,2008" . |
输出事件
Attr | Details |
---|---|
ionCancel | Emitted when the datetime selection was cancelled. |
ionChange | Emitted when the datetime selection has changed. |
Sass Variables
iOS
Property | Default | Description |
---|---|---|
$datetime-ios-padding-top |
$item-ios-padding-top |
Padding top of the DateTime component |
$datetime-ios-padding-right |
($item-ios-padding-right / 2) |
Padding right of the DateTime component |
$datetime-ios-padding-bottom |
$item-ios-padding-bottom |
Padding bottom of the DateTime component |
$datetime-ios-padding-left |
$item-ios-padding-left |
Padding left of the DateTime component |
$datetime-ios-placeholder-color |
#999 |
Color of the DateTime placeholder |
Material Design
Property | Default | Description |
---|---|---|
$datetime-md-padding-top |
$item-md-padding-top |
Padding top of the DateTime component |
$datetime-md-padding-right |
($item-md-padding-right / 2) |
Padding right of the DateTime component |
$datetime-md-padding-bottom |
$item-md-padding-bottom |
Padding bottom of the DateTime component |
$datetime-md-padding-left |
$item-md-padding-left |
Padding left of the DateTime component |
$datetime-md-placeholder-color |
#999 |
Color of the DateTime placeholder |
Windows Platform
Property | Default | Description |
---|---|---|
$datetime-wp-min-width |
45% |
Min width of the DateTime component |
$datetime-wp-padding-top |
$item-wp-padding-top |
Padding top of the DateTime component |
$datetime-wp-padding-right |
($item-wp-padding-right / 2) |
Padding right of the DateTime component |
$datetime-wp-padding-bottom |
$item-wp-padding-bottom |
Padding bottom of the DateTime component |
$datetime-wp-padding-left |
$item-wp-padding-left |
Padding left of the DateTime component |
$datetime-wp-border-width |
2px |
Border width of the DateTime component |
$datetime-wp-border-color |
$input-wp-border-color |
Border color of the DateTime component |
$datetime-wp-placeholder-color |
$input-wp-border-color |
Color of the DateTime placeholder |