• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 日期滑动选择器弹窗
2
3根据指定的日期范围创建日期滑动选择器,展示在弹窗上。
4
5>  **说明:**
6>
7> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见[UIContext](../apis/js-apis-arkui-UIContext.md#uicontext)说明。
10>
11> 从API version 10开始,可以通过使用[UIContext](../apis/js-apis-arkui-UIContext.md#uicontext)中的[showDatePickerDialog](../apis/js-apis-arkui-UIContext.md#showdatepickerdialog)来明确UI的执行上下文。
12
13## DatePickerDialog.show
14
15show(options?: DatePickerDialogOptions)
16
17定义日期滑动选择器弹窗并弹出。
18
19**DatePickerDialogOptions参数:**
20
21| 参数名 | 参数类型 | 必填 | 参数描述 |
22| -------- | -------- | -------- | -------- |
23| start | Date | 否 | 设置选择器的起始日期。<br>默认值:Date('1970-1-1') |
24| end | Date | 否 | 设置选择器的结束日期。<br/>默认值:Date('2100-12-31') |
25| selected | Date | 否 | 设置当前选中的日期。<br/>默认值:当前系统日期 |
26| lunar | boolean | 否 | 日期是否显示为农历。<br/>默认值:false |
27| showTime<sup>10+</sup> | boolean | 否 | 是否展示时间项。<br/>默认值:false |
28| useMilitaryTime<sup>10+</sup> | boolean | 否 | 展示时间是否为24小时制。<br/>默认值:false<br />**说明:**当展示时间为12小时制时,上下午与小时无联动关系。 |
29| disappearTextStyle<sup>10+</sup> | [PickerTextStyle](ts-basic-components-datepicker.md#pickertextstyle10类型说明) | 否 | 设置所有选项中最上和最下两个选项的文本颜色、字号、字体粗细。<br/>默认值:<br/>{<br/>color: '#ff182431',<br/>font: {<br/>size: '14fp', <br/>weight: FontWeight.Regular<br/>}<br/>} |
30| textStyle<sup>10+</sup> | [PickerTextStyle](ts-basic-components-datepicker.md#pickertextstyle10类型说明) | 否 | 设置所有选项中除了最上、最下及选中项以外的文本颜色、字号、字体粗细。<br/>默认值:<br/>{<br/>color: '#ff182431',<br/>font: {<br/>size: '16fp', <br/>weight: FontWeight.Regular<br/>}<br/>} |
31| selectedTextStyle<sup>10+</sup> | [PickerTextStyle](ts-basic-components-datepicker.md#pickertextstyle10类型说明) | 否 | 设置选中项的文本颜色、字号、字体粗细。<br/>默认值:<br/>{<br/>color: '#ff007dff',<br/>font: {<br/>size: '20vp', <br/>weight: FontWeight.Medium<br/>}<br/>} |
32| alignment<sup>10+</sup>  | [DialogAlignment](ts-methods-alert-dialog-box.md#dialogalignment枚举说明) | 否   | 弹窗在竖直方向上的对齐方式。<br>默认值:DialogAlignment.Default |
33| offset<sup>10+</sup>     | [Offset](ts-types.md#offset) | 否     | 弹窗相对alignment所在位置的偏移量。<br/>默认值:{&nbsp;dx:&nbsp;0&nbsp;,&nbsp;dy:&nbsp;0&nbsp;} |
34| maskRect<sup>10+</sup>| [Rectangle](ts-methods-alert-dialog-box.md#rectangle10类型说明) | 否     | 弹窗遮蔽层区域,在遮蔽层区域内的事件不透传,在遮蔽层区域外的事件透传。<br/>默认值:{ x: 0, y: 0, width: '100%', height: '100%' } |
35| onAccept<sup>(deprecated)</sup> | (value: [DatePickerResult](ts-basic-components-datepicker.md#DatePickerResult对象说明)) => void | 否 | 点击弹窗中的“确定”按钮时触发该回调。<br />**说明:**<br />从API version 8 开始支持,从 API version 10 开始废弃,建议使用onDateAccept。 |
36| onCancel | () => void | 否 | 点击弹窗中的“取消”按钮时触发该回调。 |
37| onChange<sup>(deprecated)</sup> | (value: [DatePickerResult](ts-basic-components-datepicker.md#DatePickerResult对象说明)) => void | 否 | 滑动弹窗中的滑动选择器使当前选中项改变时触发该回调。<br />**说明:**<br />从API version 8 开始支持,从 API version 10 开始废弃,建议使用onDateChange。 |
38| onDateAccept<sup>10+</sup> | (value:  Date) => void | 否 | 点击弹窗中的“确定”按钮时触发该回调。<br />**说明:**<br />当showTime设置为true时,回调接口返回值value中时和分为选择器选择的时和分。否则,返回值value中时和分为系统时间的时和分。 |
39| onDateChange<sup>10+</sup> | (value:  Date) => void | 否 | 滑动弹窗中的滑动选择器使当前选中项改变时触发该回调。<br />**说明:**<br />当showTime设置为true时,回调接口返回值value中时和分为选择器选择的时和分。否则,返回值value中时和分为系统时间的时和分。 |
40
41**异常情形说明:**
42
43| 异常情形   | 对应结果  |
44| -------- |  ------------------------------------------------------------ |
45| 起始日期晚于结束日期,选中日期未设置    | 起始日期、结束日期和选中日期都为默认值  |
46| 起始日期晚于结束日期,选中日期早于起始日期默认值    | 起始日期、结束日期都为默认值,选中日期为起始日期默认值  |
47| 起始日期晚于结束日期,选中日期晚于结束日期默认值    | 起始日期、结束日期都为默认值,选中日期为结束日期默认值  |
48| 起始日期晚于结束日期,选中日期在起始日期与结束日期默认值范围内    | 起始日期、结束日期都为默认值,选中日期为设置的值 |
49| 选中日期早于起始日期    | 选中日期为起始日期  |
50| 选中日期晚于结束日期    | 选中日期为结束日期  |
51| 起始日期晚于当前系统日期,选中日期未设置    | 选中日期为起始日期  |
52| 结束日期早于当前系统日期,选中日期未设置    | 选中日期为结束日期  |
53| 日期格式不符合规范,如‘1999-13-32’   | 取默认值  |
54| 起始日期或结束日期早于系统有效范围    | 起始日期或结束日期取系统有效范围最早日期  |
55| 起始日期或结束日期晚于系统有效范围    | 起始日期或结束日期取系统有效范围最晚日期  |
56
57系统日期范围:1900-1-31 ~ 2100-12-31
58
59选中日期会在起始日期与结束日期异常处理完成后再进行异常情形判断处理
60
61## 示例
62
63```ts
64// xxx.ets
65@Entry
66@Component
67struct DatePickerDialogExample {
68  selectedDate: Date = new Date("2010-1-1")
69
70  build() {
71    Column() {
72      Button("DatePickerDialog")
73        .margin(20)
74        .onClick(() => {
75          DatePickerDialog.show({
76            start: new Date("2000-1-1"),
77            end: new Date("2100-12-31"),
78            selected: this.selectedDate,
79            showTime:true,
80            useMilitaryTime:false,
81            disappearTextStyle: {color: Color.Pink, font: {size: '22fp', weight: FontWeight.Bold}},
82            textStyle: {color: '#ff00ff00', font: {size: '18fp', weight: FontWeight.Normal}},
83            selectedTextStyle: {color: '#ff182431', font: {size: '14fp', weight: FontWeight.Regular}},
84            onDateAccept: (value: Date) => {
85              // 通过Date的setFullYear方法设置按下确定按钮时的日期,这样当弹窗再次弹出时显示选中的是上一次确定的日期
86              this.selectedDate = value
87              console.info("DatePickerDialog:onDateAccept()" + value.toString())
88            },
89            onCancel: () => {
90              console.info("DatePickerDialog:onCancel()")
91            },
92            onDateChange: (value: Date) => {
93              console.info("DatePickerDialog:onDateChange()" + value.toString())
94            }
95          })
96        })
97
98      Button("Lunar DatePickerDialog")
99        .margin(20)
100        .onClick(() => {
101          DatePickerDialog.show({
102            start: new Date("2000-1-1"),
103            end: new Date("2100-12-31"),
104            selected: this.selectedDate,
105            lunar: true,
106            disappearTextStyle: {color: Color.Pink, font: {size: '22fp', weight: FontWeight.Bold}},
107            textStyle: {color: '#ff00ff00', font: {size: '18fp', weight: FontWeight.Normal}},
108            selectedTextStyle: {color: '#ff182431', font: {size: '14fp', weight: FontWeight.Regular}},
109            onDateAccept: (value: Date) => {
110              this.selectedDate = value
111              console.info("DatePickerDialog:onDateAccept()" + value.toString())
112            },
113            onCancel: () => {
114              console.info("DatePickerDialog:onCancel()")
115            },
116            onDateChange: (value: Date) => {
117              console.info("DatePickerDialog:onDateChange()" + value.toString())
118            }
119          })
120        })
121    }.width('100%')
122  }
123}
124```
125
126![DataPickerDialog](figures/DatePickerDialogApi10.gif)
127