2

我正在使用IonicNative页面中的 Cordova 插件。

我使用两种不同的选择,一种选择日期,另一种选择时间。两者在 iOS 上都可以正常工作,但在 Android 上我有两个问题。

  1. 在日期选择器上没有限制,因此无法选择旧日期,即使我确实在控制器中传递了它。

    showDatePicker(){
    this.datePicker.show({
      date: this.dateChosen,
      mode: 'date',
      minDate: this.today,
      maxDate: this.maxDay,
      allowOldDates: false        }).then(
      date => {
        this.dateChosen = m(date);
      },
      err => alert('Error occurred while getting date: ' + err)
    );}
    

    我使用 moment.js 生成日期/时间,所以this.dateChose = moment(); 它不是问题的根源,同样适用于this.todaythis.maxDay

我尝试使用 javascript Date(),但它没有改变任何东西,在 Android 上我仍然可以选择我想要的任何日期

  1. 更重要的问题是时间选择器根本无法在 Android 上运行

    showTimePicker(){
    this.datePicker.show({
      date: this.timeChosen,
      mode: 'time',
      is24Hour: true,
      minuteInterval: 15,
      allowOldDates: false        }).then(
      date => {
        this.timeChosen = m(date);
      },
      err => alert('Error occurred while getting date: ' + err)
    );}
    

在 iOS 上我没有问题,它工作得很好,但在 Android 上,它进入 err 状态,错误消息为For input string "2017-07-10T13:10.24.213Z". 我更改了输入以将其传递为 unix 时间,但它只是更改了错误消息。有谁知道该怎么办??

4

3 回答 3

4

我有一个有用的答案:)

  import { DatePicker } from '@ionic-native/date-picker'
  //...
  constructor(public datePicker: DatePicker) {}
  //...
  public toPickDateTime() {

    let minDays = 2
    let maxDays = 365

    this.datePicker
      .show({
        mode: 'datetime',
        date: this.getNowAndAdd(2, true),
        minDate: this.getNowAndAdd(2),
        maxDate: this.getNowAndAdd(5),
        is24Hour: true,
        androidTheme: this.datePicker.ANDROID_THEMES.THEME_HOLO_DARK,
      })
      .then(
        date => console.log(date),
        err => console.log(err)
      );
  }

  private getNowAndAdd(nbDays, forceDate = false): any
  {
    var date = new Date(new Date().getTime() + (nbDays * 24 * 3600 * 1000))

    return (this.platform.is("android") && !forceDate) ? date.getTime() : date
  }

您需要知道 minDate 和 maxDate 是“错误的”,没有人不在乎 ^^。在 android 上你需要传递一个整数,但在 ios 上你需要传递一个日期

我说这是一个错误,因为“ionic”和“cordova”必须在完美的世界中进行这种解析。

因为它没有'这个技巧可以解决问题。

于 2017-09-13T11:56:45.973 回答
2

好的,所以我通过完全删除cordova插件解决了这个问题,而是在ion-datetime这两种情况下都使用了Ionic自己的组件。现在它在 Android 上显示的是滑轮而不是日历,但我对此很好。

此外,添加诸如最小、最大日期之类的限制很容易,可以动态地进行,并且在Ionic Docs上有详细记录

于 2017-07-12T08:56:08.713 回答
0

要使用该ionic-native/date-picker插件,您需要在设备上运行项目,因为该插件使用的是 cordova。如果您使用ionic serve运行项目,您会在控制台中看到如下消息:

Ionic Native: tried calling DatePicker.show, but Cordova is not available. Make sure to a) run in a real device or simulator and b) include cordova.js in your index.html
于 2018-09-03T18:01:18.067 回答