美文网首页初识小程序
订单过期定时器的实现

订单过期定时器的实现

作者: 洗耳恭听_kai | 来源:发表于2020-10-14 01:20 被阅读0次

引言:订单列表中未支付的订单,需要设置一个过期时间,并显示倒计时

具体步骤:

  • 获取未支付的订单数据后,加载定时器
  • 移除未支付已过期的订单
  • 退出页面卸载定时器
  • 后台处理过期时间

小程序端

1、小程序中获取当前时间:Date.parse(new Date()),但是注意,需要除以1000,才能和php后端获取的过期时间戳相减计算出剩余时间
2、data中保存timer为定时器
3、页面渲染出来直接是遍历过后的left_time

data: {
    dzf_order_list: [],
    dzf_curpage: 0,
    timer: '',
  },
/**
   * 未支付订单倒计时
   */
  countDown:function(){
    var that = this;
    that.data.timer = setInterval(function () {
      var orders = that.data.dzf_order_list;
      console.log(orders)
      for (var i = 0; i < orders.length; i++) {
        var status = orders[i].order_state;
        if (status == 1) {
          //过期时间
          var stop_time = orders[i].end_time;
          //当前时间
          var timestamp = Date.parse(new Date());  
          timestamp = timestamp / 1000;
          //计算剩余时间差值
          var leftTime = stop_time - timestamp;
          if (leftTime > 0) {
            var h = Math.floor(leftTime / 3600);
            var m = Math.floor((leftTime / 60 % 60));
            var s = Math.floor((leftTime % 60));
            var left_time = h + " : " + m + " : " + s;
            orders[i].left_time = left_time;
          }else{
            //移除超时未支付的订单
            orders.splice(i, 1);
          }
        }
      }
      that.setData({
        dzf_order_list:orders
      });
    }, 1000);
  },
<view class="p" wx:if="{{order.order_state==1}}">付款还剩
     <text class="color_r">{{order.left_time}}</text>
</view>

后台

       if($list){
            foreach ($list as $key => $val){
                if($val['order_state'] == 1){
                    //过期时间
                    $order_time = time() - $val['order_time'];
                    $d = floor($order_time / (3600 * 24));
                    $end = $val['order_time'] + (3600 * 24);
                    $list[$key]['end_time'] = $end;
                    if($d > 1){
                        unset($list[$key]);
                    }
                }
                if($val['order_state'] == 8 || $val['order_state'] == 6){
                    unset($list[$key]);
                }
            }
        }

相关文章

  • 订单过期定时器的实现

    引言:订单列表中未支付的订单,需要设置一个过期时间,并显示倒计时 具体步骤: 获取未支付的订单数据后,加载定时器 ...

  • 使用定时任务清除过期数据的弊端

    有时候我们可能会在java中用到定时器来清楚掉过期的数据,比如超时未支付的订单,而适用定时器会有什么弊端呢,下面是...

  • key的过期策略

    3种过期策略 定时删除含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临...

  • Redis过期键删除策略

    过期键删除策略有以下三种 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执...

  • Redis的 过期策略 和 淘汰策略

    过期策略 定时过期(主动淘汰),Redis未使用每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清...

  • Redis的过期策略和内存淘汰机制

    定时删除 含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key...

  • Redis数据淘汰机制

    定时删除 策略 : 在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作...

  • 过期机制

    一.定时删除含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对ke...

  • Golang-基于TimeingWheel定时器

    设计思路 在linux下实现定时器主要有如下方式 基于链表实现定时器 基于排序链表实现定时器 基于最小堆实现定时器...

  • iOS开发中常用的方法(一)

    系统弹窗:### 过期方法: 新方法: 定时器/延时:### 延迟调用方法一: 延迟调用方法二: 定时器一:(精确...

网友评论

    本文标题:订单过期定时器的实现

    本文链接:https://www.haomeiwen.com/subject/uvjlpktx.html