收藏
回答

关于picker为日期型时 IOS系统 属性start和end范围不生效 的一个bug?

一个日期型选择控件,设置时开始和结束时间,在使用期间发现在IOS端有时会有时间段不起作用的情况

<view style="">

        <picker mode="datevalue="{{datestart}}name="GiveDatestart="{{datestart}}end="{{enddate}}bindchange="bindDateChange">

        <view class='nocoupon'>预定</view>      

        </picker>

  </view>

经过测试发现 :

如果今天new Date()是 2021-01-28

onLoad: function (options) {

    var that = this;

 var d = new Date();

    var ed = new Date();

    that.setData({

      datestart: d.getFullYear() + "-" + (d.getMonth() + 1+ "-" + d.getDate(), //选择配送日期的开始时间  现在为当天

      enddate: ed.getFullYear() + "-" + (ed.getMonth() + 1+ "-" + (ed.getDate() + 3), //选择配送日期的结束时间  现在为3天后    })

}

经过上面的计算,取5天后的日期,结束时间 enddate 会是 2021-01-33

这个时间在安卓端picker控件的时间段一样会正常显示。 但是在IOS端 就无效了。

IOS端 安卓端

所以自己写个函数把:()

function getDateSt(today, addDayCount,showtype='datetime') {  //返回需要的几天后的日期

  var date;

  if (today{

    date = new Date(today);

  } else {

    date = new Date();

  }

  date.setDate(date.getDate() + addDayCount);//获取AddDayCount天后的日期 

  var year = date.getFullYear();

  var month = date.getMonth() + 1;//获取当前月份的日期 

  var day = date.getDate();

  var hour = date.getHours()

  var minute = date.getMinutes()

  var second = date.getSeconds()

  if(showtype=='date')

  return [year, month, day].map(formatNumber).join('-')

  else

  return [year, month, day].map(formatNumber).join('-'+ ' ' + [hour, minute, second].map(formatNumber).join(':')

  //return y + "-" + m + "-" + d;

},

测试了下没问题了!希望有问题的朋友早日出坑。(找了2天呀,各种测试)


最后一次编辑于  2021-02-01
回答关注问题邀请回答
收藏

1 个回答

  • 乐豆信息
    乐豆信息
    2021-02-01

    一种思路是将日期转化成时间戳后再进行计算,更推荐使用像dayjs这样的第三方库来处理时间问题。

    2021-02-01
    有用
    回复 1
    • 寒冬
      寒冬
      2021-02-01
      ok
      2021-02-01
      回复
登录 后发表内容
问题标签