一,现象
做了个优惠券功能,需要对优惠券进行金额和时间排序,但是微信开发者工具和真机调试都没问题。一发布体验版,就只剩下金额排序生效了,时间排序的程序看起来压根就没有执行。
二,原因
ios手机的时间处理格式得是2021/08/26 23:59:59类型的。而后端返回的时间格式是2021-08-26 23:59:59,在ios中识别不了,所以出现了这种问题。
解决办法就是直接手动把时间格式改成2021-08-26 23:59:59可以识别的格式即可
三,我的解决
availableListforShow(){
//需要做排序,把优惠金额最高的放最前面,若是优惠金额相同则把有效期近的放前面
let newList =JSON.parse(JSON.stringify(this.available))
//如果有特价菜,则商品小计要减去特价菜优惠之后-再来计算平台优惠
let originNum
if(this.special_price_coupon_saving>0){
originNum=this.subtotal-this.special_price_coupon_saving
}else{
originNum=this.subtotal
}
//第一步,把所有的优惠金额全部计算出来,添加属性到每一个对象中,并且把时间格式转化为ios兼容的YY/MM/DD hh:mm:ss格式
let couponNum
let newArr=newList.map((item,index)=>{
item.passTime=item.passTime.replace(/-/g,'/')
if(item.coupType=='1'){//满减券
couponNum=item.ruleList[0].operation
}else{//折扣券
let couponMul=originNum*item.ruleList[0].operation
const countNum1=this.$util.numDiv(couponMul,100)
if(countNum1>=item.ruleList[0].maxDiscount){//限额
couponNum=item.ruleList[0].maxDiscount
}else{
couponNum=countNum1
}
}
item['couponNum']=couponNum
return item
})
console.log("我处理后的优惠券列表",newArr)
let myNewArr=JSON.parse(JSON.stringify(newArr))
//第二步,把转化好的数组,按照优惠金额从高到低排序,
myNewArr.sort(function(a,b){
console.log("---金额比较---",a.couponNum > b.couponNum)
if (a.couponNum > b.couponNum) {
return -1//反向,大数在前
}else{
if((a.couponNum == b.couponNum) && (Date.parse(a.passTime)<Date.parse(b.passTime))){
console.log("-----金额相同,时间比较----",Date.parse(a.passTime)<Date.parse(b.passTime))
return -1 //有效期小的在前
}else{
return 0
}
}
})
console.log("重新排序后的数组",myNewArr)
return myNewArr
}
主要就是这行代码:
item.passTime=item.passTime.replace(/-/g,'/')