Ionic Native Date Picker无法在Android上运行

时间:2017-07-10 13:13:59

标签: cordova ionic-framework ionic2 ionic3 ionic-native

我正在使用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

  2. 也是如此

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

    1. 更重要的问题是Time Picker在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)
      );}
      
    2. 在iOS上我没有问题,它运行得很好,但在Android上,它变为错误状态,错误消息为For input string "2017-07-10T13:10.24.213Z"。 我更改了输入以将其传递给unix时间,但它只是更改了错误消息。谁知道该怎么办?

3 个答案:

答案 0 :(得分: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是" buged"没有人不关心^^。 在Android上你需要传递一个整数,但在ios上你需要传递一个日期

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

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

答案 1 :(得分:2)

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

Ionic Docs

上添加限制,例如最小,最大日期也很容易,动态可行并且有详细记录

答案 2 :(得分: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