@nativescript/datetimepicker
一个用于选择日期和时间的 NativeScript 插件。
npm i --save @nativescript/datetimepicker

@nativescript/datetimepicker

该插件提供了用于选择日期和时间的 UI 元素 DatePickerFieldTimePickerFieldDateTimePickerFields。其中,DatePickerFieldTimePickerField 组件扩展了 TextField 视图,而 DateTimePickerFields 扩展了包含 DatePickerFieldTimePickerField 组件实例的 GridLayout 布局容器。还有一个 DateTimePicker 类,它提供了静态方法 pickDate()pickTime(),可以调用以显示与字段相同的对话框选择器。

DatePickerField on iOS (left) and Android (right) TimePickerField on iOS (left) and Android (right)

内容

安装

npm install @nativescript/datetimepicker

使用 @nativescript/datetimepicker

核心

  1. 使用提供您的前缀(例如 datetime)和将其值设置为插件名称的方式将插件命名空间注册到页面的 xmlns 属性。

    <Page
    xmlns="http://schemas.nativescript.org/tns.xsd"
    xmlns:datetime="@nativescript/datetimepicker"
    >
    </Page>
  2. 通过前缀访问 datePickerField 视图。

    <Page
    xmlns="http://schemas.nativescript.org/tns.xsd"
    xmlns:datetime="@nativescript/datetimepicker"
    >

    <datetime:DatePickerField hint="select date"></datetime:DatePickerField>
    <datetime:TimePickerField hint="select time"></datetime:TimePickerField>
    <datetime:DateTimePickerFields
    hintDate="select date"
    hintTime="select time"
    >
    </datetime:DateTimePickerFields>
    </Page>

Angular

  1. 通过将插件 NativeScriptDateTimePickerModule 添加到包含您想要使用 DatePickerField 的组件的模块的 imports 数组中来注册插件。

    import { NativeScriptDateTimePickerModule } from '@nativescript/datetimepicker/angular'

    @NgModule({
    imports: [
    NativeScriptCommonModule,
    NativeScriptDateTimePickerModule,
    // ...
    ],
    // ...
    })
  2. 如下所示在标记中使用 DatePickerField

    <DatePickerField hint="select date"></DatePickerField>
    <TimePickerField hint="select time"></TimePickerField>
    <DateTimePickerFields
    hintDate="select date"
    hintTime="select time"
    >
    </DateTimePickerFields>

Vue

  1. 插件安装后,在 main.ts 文件中将其与您的应用程序项目注册,以实现全局访问。

    import DateTimePicker from '@nativescript/datetimepicker/vue'

    import Home from './components/Home.vue'

    const app = createApp(Home).use(DateTimePicker)

    app.start()
  2. 如下所示在模板中使用 DatePickerField

    <DatePickerField hint="select date" />
    <TimePickerField hint="select time" />
    <DateTimePickerFields hintDate="select date" hintTime="select time" />

Svelte

安装插件后,在 app.ts 文件中注册 DateTimePickerFields

registerNativeViewElement(
'dateTimePickerFields',
() => require('@nativescript/datetimepicker').DateTimePickerFields,
)

接下来,通过添加 dateTimePickerFields 元素在标记中使用选择器。

<dateTimePickerFields hintDate="pick a date" hintTime="pick time"></dateTimePicker>

设置选定的日期和时间

要设置 TimePickerField 的选定时间,使用 time 属性。

<TimePickerField time="01:00"></TimePickerField>

DatePickerFieldDateTimePickerFields 组件都使用 date 属性来设置它们的选定日期(以及 DateTimePickerFields 的时间)值。

<DatePickerField date="2019/02/24"></DatePickerField>

<DateTimePickerFields date="2019/02/24 01:00"></DateTimePickerFields>

更改选择器的标题和按钮标签

要更改选择器弹出窗口的标题和按钮标签,使用 pickerOkTextpickerCancelTextpickerTitle 属性。

<DatePickerField
hint="tap to choose"
pickerOkText="Approve"
pickerCancelText="Reject"
pickerTitle="Confirm predefined date selection"
pickerDefaultDate="2019/05/15"
>
</DatePickerField>

DateTimePickerFields 还具有额外的 pickerTitleDate 用于日期选择器标题和 pickerTitleTime 用于时间选择器标题。

<DateTimePickerFields
hintDate="tap to choose date"
hintTime="tap to choose time"
pickerOkText="Approve"
pickerCancelText="Reject"
pickerTitleDate="Confirm predefined date selection"
pickerTitleTime="Confirm predefined time selection"
pickerDefaultDate="2019/05/15 22:00"
autoPickTime="true"
>
</DateTimePickerFields>

设置本地化

要本地化 DatePickerFieldDateTimePickerFields 组件,使用 locale 属性。

<DatePickerField locale="en_GB" hint="select date"></DatePickerField>
<!-- DateTimePickerFields -->
<DateTimePickerFields
locale="de_DE"
hintDate="datum auswählen"
hintTime="zeit wählen"
pickerOkText="Bestätigen"
pickerCancelText="Stornieren"
pickerTitleDate="Datum auswählen"
pickerTitleTime="Zeit wählen"
>
</DateTimePickerFields>

格式化日期和时间

除了依赖于 locale 属性值的默认格式外,您还可以添加自己的自定义格式,该格式可以包括日期/时间的顺序和自定义文本。要自定义日期格式,使用 dateFormat 属性。

<DatePickerField
date="2019/02/24"
dateFormat="'my date': dd-MMMM-yyyy"
>
</DatePickerField>

TimePickerField 将根据 iOS 设备设置中的所选区域以及 Android 设备的 Use 24-Hour Format 设置来决定是否使用 12 小时或 24 小时格式(用于字段中选中时间的格式化以及小时选择器的值)。要在 Android 上更改默认设置,您需要使用 timeFormat 属性;要在 iOS 上更改设置,您需要使用 locale 属性。

<TimePickerField
time="16:00"
timeFormat="h:mm a"
locale="en_US"
>
</TimePickerField>

对于 DateTimePickerFields 选择器,使用相同的属性(dateFormattimeFormatlocale)来自定义日期和时间格式。

<DateTimePickerFields
date="2019/02/24 16:00"
timeFormat="h:mm a"
locale="en_US"
>
</DateTimePickerFields>

设置最小和最大日期

要设置最小和最大日期,请使用 DatePickerFieldDateTimePickerFields 组件的 minDatemaxDate 属性。

<DatePickerField
minDate="2020/02/02"
maxDate="2021/02/02"
hint="tap to select"
>
</DatePickerField>
<!-- DateTimePickerFields -->
<DateTimePickerFields
minDate="2020/02/02"
maxDate="2021/02/02"
hintDate="tap to select date"
hintTime="tap to select time"
>
</DateTimePickerFields>

设置 DateTimePickerFields 选择器的布局

要水平(默认)或垂直排列选择器字段,请使用 orientation 属性。

<DateTimePickerFields
hintDate="select date"
hintTime="select time"
orientation="vertical"
>
</DateTimePickerFields>

使用 CSS 设计选择器样式

您可以使用 CSS 为 DatePickerFieldTimePickerField 选择器设置样式。相同的样式也适用于 DateTimePickerFields 组件中的选择器。选择器支持通过以下预定义的 CSS 类更改其颜色

  • date-time-picker:选择器背景和标题文本颜色
  • date-time-picker-spinners:日期/时间选择旋转器的背景和文本颜色
  • date-time-picker-buttons:确定/取消按钮的背景和文本颜色
  • date-time-picker-button-okdate-time-picker-button-cancel:为每个按钮提供不同的样式。

注意,iOS 原生实现按钮背景颜色的功能有限。当一个按钮被标记为取消按钮时,其背景总是白色且无法更改。如果您确实需要具有其他颜色的取消按钮,您可以通过指定的取消按钮类传递背景颜色,但这样将会改变选择器布局,并将取消按钮与确定按钮一起放置,它们将具有相同的背景颜色。

DatePickerField with CSS applied on iOS (left) and Android (right)
timepickerfield,
datepickerfield
{
padding: 12 4;
}

timepickerfield.apply-css,
datepickerfield.apply-css
{
color: #cddc39;
background-color: #00796b;
font-size: 20;
font-weight: bold;
padding: 20;
}

.date-time-picker.apply-css {
color: #00796b;
background-color: #cddc39;
}

.date-time-picker-spinners.apply-css {
color: #cddc39;
background-color: #00796b;
}

.date-time-picker-buttons.apply-css {
color: #00796b;
}

要在打开 DateTimePicker 时动态应用样式,可以执行以下操作

import {
DateTimePicker,
DateTimePickerStyle,
} from '@nativescript/datetimepicker'
import { Application, View } from '@nativescript/core'

function createPicker(args: EventData) {
const dateTimePickerStyle = DateTimePickerStyle.create(args.object as any)

// This example handles styling the calendar for light and dark mode of the device settings
if (Application.systemAppearance() === 'dark') {
// style for dark mode
dateTimePickerStyle.buttonsBackgroundColor = new Color('#202125')
dateTimePickerStyle.dialogBackgroundColor = new Color('#202125')
dateTimePickerStyle.titleTextColor = new Color('#fff')
dateTimePickerStyle.buttonsTextColor = new Color('#0067a6')
dateTimePickerStyle.spinnersBackgroundColor = new Color('#202125')
dateTimePickerStyle.spinnersTextColor = new Color('#fff')
} else {
// style for light mode
dateTimePickerStyle.buttonsBackgroundColor = new Color('#fff')
dateTimePickerStyle.dialogBackgroundColor = new Color('#fff')
dateTimePickerStyle.titleTextColor = new Color('#0067a6')
dateTimePickerStyle.buttonsTextColor = new Color('#0067a6')
dateTimePickerStyle.spinnersBackgroundColor = new Color('#fff')
dateTimePickerStyle.spinnersTextColor = new Color('#0067a6')
}

DateTimePicker.pickDate(
{
context: (args.object as View)._context,
minDate: new Date((new Date() as any) - 1),
title: 'DatePicker',
okButtonText: 'Okay',
cancelButtonText: 'Cancel',
locale: 'es',
},
dateTimePickerStyle,
).then((result) => {
// handle the result
})
}

手动创建自定义选择器

内部 DatePickerFieldTimePickerField 调用 DateTimePicker 类的公共方法 pickDatepickTime。您可以通过手动调用这些方法来创建自定义选择器。pickDate 方法接受 DatePickerOptions,而 pickTime 方法接受 TimePickerOptions

function onPickDateTap(args: EventData) {
const dateToday = new Date()
const dateTomorrow = new Date(
dateToday.getFullYear(),
dateToday.getMonth(),
dateToday.getDate() + 1,
)
const dateNextWeek = new Date(
dateToday.getFullYear(),
dateToday.getMonth(),
dateToday.getDate() + 7,
)

DateTimePicker.pickDate({
context: args.object._context,
date: dateTomorrow,
minDate: dateTomorrow,
maxDate: dateNextWeek,
okButtonText: 'OK',
cancelButtonText: 'Cancel',
title: 'choose date',
locale: 'en_GB',
}).then((selectedDate) => {
if (selectedDate) {
this.dateText = this.getFormattedDate(selectedDate)
}
})
}
function onPickTimeTap(args: EventData) {
const dateToday = new Date()
const dateTomorrow = new Date(
dateToday.getFullYear(),
dateToday.getMonth(),
dateToday.getDate() + 1,
)
dateTomorrow.setHours(8)
dateTomorrow.setMinutes(0)
DateTimePicker.pickTime({
context: args.object._context,
time: dateTomorrow,
okButtonText: 'OK',
cancelButtonText: 'Cancel',
title: 'choose time',
locale: 'en_GB',
is24Hours: true,
}).then((selectedTime) => {
if (selectedTime) {
this.timeText = this.getFormattedTime(selectedTime)
}
})
}

API

DatePickerField

属性 类型 描述
date 日期 选择器字段当前显示的日期。当在标记中使用时,提供的字符串将被传递到 Date 构造函数 以创建一个新的 Date 对象。
minDate 日期 选择器字段可以选择的最小日期。
maxDate 日期 选择器字段可以选择的最大日期。
locale 字符串 用于本地化月份名称以及旋转器顺序(en_GB 首个旋转器是日期,en_US 首个旋转器是月份)的区域的标识符(默认基于设备的区域设置)。
hint 字符串 获取或设置提示文本。提示是在字段中显示的文本,当 date 为 null 时显示。
dateFormat 字符串 用于选择器字段中文本的格式(在 Android 上用作 SimpleDateFormat 的模式,在 iOS 上用作 NSDateFormatter 的 dateFormat,默认由 locale 属性的当前值生成)。
pickerTitle 字符串 将显示为选择器标题的文本,默认为未定义。
pickerOkText 字符串 选择器的确认按钮文本(在 iOS 上默认为 OK,在 Android 上为 OK 的本地化版本(基于设备的区域设置))。
pickerCancelText 字符串 选择器的取消按钮文本(在 iOS 上默认为 Cancel,在 Android 上为 Cancel 的本地化版本(基于设备的区域设置))。

TimePickerField

属性 类型 描述
time 日期 当前选择器字段显示的时间。如果是ISO 8601格式,则传递给JS Date构造函数。
locale 字符串 获取或设置字段中显示日期的本地化设置,以及选择器的本地化设置。默认值为undefined,表示格式将基于设备的设置。
hint 字符串 获取或设置提示文本。提示文本是在字段中time为null时显示的文本。
timeFormat 字符串 选择器字段中使用的文本格式(在Android中用作SimpleDateFormat的模板,在iOS中用作NSDateFormatter的dateFormat,默认值由当前locale属性值生成),此格式也将用于Android,以确定选择器是12小时制还是24小时制。
pickerTitle 字符串 将显示为选择器标题的文本,默认为未定义。
pickerOkText 字符串 选择器确认按钮的文本(默认为iOS上的OK,Android上的OK本地化版本(基于设备本地化设置))。
pickerCancelText 字符串 选择器取消按钮的文本(默认为iOS上的Cancel,Android上的Cancel本地化版本(基于设备本地化设置))。

DateTimePickerFields

属性 类型 描述
date 日期 选择器字段当前显示的日期。
minDate 日期 获取或设置最小日期。请注意,此属性仅影响日期组件。
maxDate 日期 获取或设置最大日期。请注意,此属性仅影响日期组件。
locale 字符串 获取或设置字段中显示日期的本地化设置,以及选择器的本地化设置。
默认值为undefined,表示格式将基于设备的设置。
请注意,更改本地化设置不会影响pickerOkTextpickerCancelTextpickerTitlehint属性。
dateFormat 字符串 选择器字段中使用的文本格式(在Android中用作SimpleDateFormat的模板,在iOS中用作NSDateFormatter的dateFormat,默认值由当前locale属性值生成)。
timeFormat 字符串 选择器字段中使用的文本格式(在Android中用作SimpleDateFormat的模板,在iOS中用作NSDateFormatter的dateFormat,默认值由当前locale属性值生成),此格式也将用于Android,以确定选择器是12小时制还是24小时制。
pickerTitleDate 字符串 当日期组件被点击时,选择器将显示的标题文本。
pickerTitleTime 字符串 当时间组件被点击时,选择器将显示的标题文本。
pickerOkText 字符串 选择器确认按钮的文本(默认为iOS上的OK,Android上的OK本地化版本(基于设备本地化设置))。
pickerCancelText 字符串 选择器Cancel按钮的文本(默认为iOS上的Cancel,Android上的Cancel本地化版本(基于设备本地化设置))。
autoPickTime 布尔值 表示是否应在日期组件选择日期后立即为时间组件分配值的值。默认为false
orientation 'horizontal' | 'vertical' 表示日期和时间组件如何排列的值,默认为"horizontal",表示它们将在同一行。
hintDate 字符串 datenull时,日期组件中显示的文本。
hintTime 字符串 datenull时,时间组件中显示的文本。

DateTimePicker 类

方法 返回类型 描述
pickDate(options: DatePickerOptions, style?: DateTimePickerStyle) Promise<Date> 从使用提供的选项初始化的对话框选择器中选择日期,并使用可选提供的样式进行样式化。
pickTime(options: TimePickerOptions, style?: DateTimePickerStyle) Promise<Date> 从初始化提供的选项和可选提供的样式中选择的对话框选择器中选择时间。

DatePickerOptions

属性 类型 描述
上下文 任何 视图的上下文。从视图实例的 _context 属性中获取。
date 日期 可选:将在选择器中显示的日期(如果没有提供,选择器将显示今天)。
minDate 日期 可选:可以选中的最小日期。
maxDate 日期 可选:可以选中的最大日期。
locale 字符串 可选:用于本地化月份名称和上午/下午文本的区域的标识符。
标题 字符串 可选:将作为选择器标题显示的文本。
okButtonText 字符串 可选:选择器确认按钮的文本(默认为iOS上的OK,android上基于设备区域设置的OK的本地化版本)。
cancelButtonText 字符串 可选:选择器取消按钮的文本(默认为iOS上的Cancel,android上基于设备区域设置的Cancel的本地化版本)。

TimePickerOptions

属性 类型 描述
上下文 任何 视图的上下文。从视图实例的 _context 属性中获取。
time 日期 可选:将在选择器中显示的时间(如果没有提供,选择器将显示当前时间)。
is24Hours 布尔值 可选:此值仅用于Android,以确定选择器是否为12或24小时格式。
locale 字符串 可选:用于本地化月份名称和上午/下午文本的区域的标识符。
标题 字符串 可选:将作为选择器标题显示的文本。
okButtonText 字符串 可选:选择器确认按钮的文本(默认为iOS上的OK,android上基于设备区域设置的OK的本地化版本)。
cancelButtonText 字符串 可选:选择器取消按钮的文本(默认为iOS上的Cancel,android上基于设备区域设置的Cancel的本地化版本)。

DateTimePickerStyle

属性 类型 描述
titleTextColor 颜色 用于标题文本的颜色。
dialogBackgroundColor 颜色 用于对话框选择器背景的颜色。
spinnersTextColor 颜色 用于日期/时间选择器文本的颜色。
spinnersBackgroundColor 颜色 用于日期/时间选择器背景的颜色。
buttonsTextColor 颜色 用于确定按钮文本的颜色。
buttonsBackgroundColor 颜色 用于确定按钮背景的颜色。
buttonOkTextColor 颜色 用于确定按钮文本的颜色。
buttonOkBackgroundColor 颜色 用于确定按钮背景的颜色。
buttonCancelTextColor 颜色 用于确定取消按钮文本的颜色。
buttonCancelBackgroundColor 颜色 用于确定取消按钮背景的颜色。
create(view: View) DateTimePickerStyle 基于任何提供的CSS创建样式。参数是一个具有正确设置CSS类名的视图。

许可

Apache License Version 2.0