DatePicker日期选择

  • 最多展示 5 个独立滚轮,每个滚轮表示一个不同的值。

日期-年月日时分

日期-年月日

  1. @Component({
  2. selector: 'demo-date-picker-date',
  3. encapsulation: ViewEncapsulation.None,
  4. template: `
  5. <List [className]="'date-picker-list'">
  6. <ListItem
  7. DatePicker
  8. [extra]="currentDateFormat(value, 'yyyy-mm-dd')"
  9. [arrow]="'horizontal'"
  10. [mode]="'date'"
  11. [(ngModel)]="value"
  12. (onOk)="onOk($event)"
  13. >
  14. Date
  15. <Brief>{{ name }}</Brief>
  16. </ListItem>
  17. </List>
  18. `,
  19. styles: [
  20. `
  21. .date-picker-list .am-list-item .am-list-line .am-list-extra {
  22. flex-basis: initial;
  23. }
  24. `
  25. ]
  26. })
  27. export class DemoDatePickerDateComponent {
  28. name = '选择';
  29. value = new Date();
  30. currentDateFormat(date, format: string = 'yyyy-mm-dd HH:MM'): any {
  31. const pad = (n: number): string => (n < 10 ? `0${n}` : n.toString());
  32. return format
  33. .replace('yyyy', date.getFullYear())
  34. .replace('mm', pad(date.getMonth() + 1))
  35. .replace('dd', pad(date.getDate()))
  36. .replace('HH', pad(date.getHours()))
  37. .replace('MM', pad(date.getMinutes()))
  38. .replace('ss', pad(date.getSeconds()));
  39. }
  40. onOk(result: Date) {
  41. this.name = this.currentDateFormat(result, 'yyyy-mm-dd');
  42. this.value = result;
  43. }
  44. formatIt(date: Date, form: string) {
  45. const pad = (n: number) => (n < 10 ? `0${n}` : n);
  46. const dateStr = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
  47. const timeStr = `${pad(date.getHours())}:${pad(date.getMinutes())}`;
  48. if (form === 'YYYY-MM-DD') {
  49. return dateStr;
  50. }
  51. if (form === 'HH:mm') {
  52. return timeStr;
  53. }
  54. return `${dateStr} ${timeStr}`;
  55. }
  56. }

日期-年月

  1. import { Component, ViewEncapsulation } from '@angular/core';
  2. @Component({
  3. selector: 'demo-date-picker-time',
  4. encapsulation: ViewEncapsulation.None,
  5. template: `
  6. <List [className]="'date-picker-list'">
  7. <ListItem
  8. DatePicker
  9. [extra]="currentDateFormat(value)"
  10. [arrow]="'horizontal'"
  11. [mode]="'time'"
  12. [(ngModel)]="value"
  13. (onOk)="onOk($event)"
  14. >
  15. Time
  16. <Brief>{{ name }}</Brief>
  17. </List>
  18. `,
  19. styles: [
  20. `
  21. .date-picker-list .am-list-item .am-list-line .am-list-extra {
  22. flex-basis: initial;
  23. }
  24. `
  25. ]
  26. })
  27. export class DemoDatePickerTimeComponent {
  28. name = '选择';
  29. value = new Date();
  30. currentDateFormat(date, format: string = 'yyyy-mm-dd HH:MM'): any {
  31. const pad = (n: number): string => (n < 10 ? `0${n}` : n.toString());
  32. .replace('yyyy', date.getFullYear())
  33. .replace('mm', pad(date.getMonth() + 1))
  34. .replace('dd', pad(date.getDate()))
  35. .replace('HH', pad(date.getHours()))
  36. .replace('MM', pad(date.getMinutes()))
  37. .replace('ss', pad(date.getSeconds()));
  38. }
  39. onOk(result: Date) {
  40. this.name = this.currentDateFormat(result);
  41. this.value = result;
  42. }
  43. formatIt(date: Date, form: string) {
  44. const pad = (n: number) => (n < 10 ? `0${n}` : n);
  45. const dateStr = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
  46. const timeStr = `${pad(date.getHours())}:${pad(date.getMinutes())}`;
  47. if (form === 'YYYY-MM-DD') {
  48. return dateStr;
  49. }
  50. if (form === 'HH:mm') {
  51. return timeStr;
  52. }
  53. return `${dateStr} ${timeStr}`;
  54. }
  55. }

日期-时分

当前时间小于最小时间

  1. import { Component, ViewEncapsulation } from '@angular/core';
  2. @Component({
  3. selector: 'demo-date-picker-min-date',
  4. encapsulation: ViewEncapsulation.None,
  5. template: `
  6. <List [className]="'date-picker-list'">
  7. <ListItem
  8. DatePicker
  9. [extra]="currentDateFormat(value)"
  10. [arrow]="'horizontal'"
  11. [mode]="'datetime'"
  12. [(ngModel)]="value"
  13. (onOk)="onOk($event)"
  14. >
  15. Min Date
  16. <Brief>{{ name }}</Brief>
  17. </ListItem>
  18. </List>
  19. `,
  20. styles: [
  21. `
  22. .date-picker-list .am-list-item .am-list-line .am-list-extra {
  23. flex-basis: initial;
  24. }
  25. `
  26. ]
  27. })
  28. export class DemoDatePickerMinDateComponent {
  29. name = '当前时间小于最小时间';
  30. value = new Date(1999, 1, 1, 1, 1);
  31. currentDateFormat(date, format: string = 'yyyy-mm-dd HH:MM'): any {
  32. const pad = (n: number): string => (n < 10 ? `0${n}` : n.toString());
  33. return format
  34. .replace('yyyy', date.getFullYear())
  35. .replace('mm', pad(date.getMonth() + 1))
  36. .replace('dd', pad(date.getDate()))
  37. .replace('HH', pad(date.getHours()))
  38. .replace('ss', pad(date.getSeconds()));
  39. }
  40. onOk(result: Date) {
  41. this.name = this.currentDateFormat(result);
  42. this.value = result;
  43. }
  44. formatIt(date: Date, form: string) {
  45. const pad = (n: number) => (n < 10 ? `0${n}` : n);
  46. const dateStr = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
  47. const timeStr = `${pad(date.getHours())}:${pad(date.getMinutes())}`;
  48. if (form === 'YYYY-MM-DD') {
  49. return dateStr;
  50. }
  51. if (form === 'HH:mm') {
  52. return timeStr;
  53. }
  54. return `${dateStr} ${timeStr}`;
  55. }
  56. }

当前时间大于最大时间

  1. import { Component, ViewEncapsulation } from '@angular/core';
  2. @Component({
  3. selector: 'demo-date-picker-disable',
  4. encapsulation: ViewEncapsulation.None,
  5. template: `
  6. <List [className]="'date-picker-list'">
  7. DatePicker
  8. [disabled]="true"
  9. [extra]="currentDateFormat(value)"
  10. [arrow]="'horizontal'"
  11. [mode]="'datetime'"
  12. (onOk)="onOk($event)"
  13. >
  14. Datetime
  15. <Brief>{{ name }}</Brief>
  16. </ListItem>
  17. </List>
  18. `,
  19. styles: [
  20. `
  21. .date-picker-list .am-list-item .am-list-line .am-list-extra {
  22. flex-basis: initial;
  23. }
  24. `
  25. ]
  26. })
  27. export class DemoDatePickerDisableComponent {
  28. name = '选择';
  29. value = new Date();
  30. currentDateFormat(date, format: string = 'yyyy-mm-dd HH:MM'): any {
  31. const pad = (n: number): string => (n < 10 ? `0${n}` : n.toString());
  32. return format
  33. .replace('yyyy', date.getFullYear())
  34. .replace('mm', pad(date.getMonth() + 1))
  35. .replace('dd', pad(date.getDate()))
  36. .replace('HH', pad(date.getHours()))
  37. .replace('MM', pad(date.getMinutes()))
  38. .replace('ss', pad(date.getSeconds()));
  39. }
  40. onOk(result: Date) {
  41. this.name = this.currentDateFormat(result);
  42. this.value = result;
  43. }
  44. formatIt(date: Date, form: string) {
  45. const pad = (n: number) => (n < 10 ? `0${n}` : n);
  46. const dateStr = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
  47. const timeStr = `${pad(date.getHours())}:${pad(date.getMinutes())}`;
  48. if (form === 'YYYY-MM-DD') {
  49. return dateStr;
  50. }
  51. if (form === 'HH:mm') {
  52. return timeStr;
  53. }
  54. return `${dateStr} ${timeStr}`;
  55. }
  56. }

API

注意:日期字符串在不同浏览器有不同的实现,例如 new Date('2017-1-1') 在 Safari 上是 Invalid Date,而在 Chrome 上是能正常解析的。

注意:DatePicker children 建议是 ListItem, 如果不是,需要是自定义组件(组件内需处理 onClick / extra / children 属性)