zoukankan      html  css  js  c++  java
  • 微信小程序+PHP:动态显示项目倒计时(格式:4天7小时58分钟39秒)

    1、一般我们说的显示秒杀都是指的单条数据,循环我没做。

    效果:

    2、wxml代码:

    <p class="endtime_act">距报名截止还有:
    <block wx:if="{{clock!='0天0小时0分钟0秒'}}">{{clock}}</block>
    <block wx:if="{{clock=='0天0小时0分钟0秒'}}">已经截止</block>
    </p>

    3、.js文件代码:重点解释一下下面的WHY?因为我们从PHP后台拿到的时间数据,第一次在js运行是获取不到数据的,和web端的js不一样,具体原因应该是微信小程序不同于web网页;所以第一次获取的【total_micro_second】一定是负数,那么我们要干的就是正数显示正数,负数显示1;为什么呢???

    因为:结果大于1000ms也就是1s的时间,经过格式化后显示为0天0小时0分钟1秒!=0天0小时0分钟0秒,而我们赋值的1ms经过格式化后显示为0天0小时0分钟0秒,所以这就是本质区别。

    (上次代码有点问题,截止的时间会闪,这次修正之后已解决。)

    // pages/xiangqing/xiangqing.js
    
    function countdown(that) {
      var EndTime = that.data.end_time || [];
      var NowTime = new Date().getTime();
      var total_micro_second = EndTime - NowTime || [];   //单位毫秒
      if (total_micro_second < 0) {
        console.log('时间初始化小于0,活动已结束状态');
        total_micro_second = 1;     //单位毫秒 ------  WHY?
      }
      console.log('剩余时间:' + total_micro_second);
          // 渲染倒计时时钟
          that.setData({
            clock: dateformat(total_micro_second)   //若已结束,此处输出'0天0小时0分钟0秒'
          });
          if (total_micro_second <= 0) {
            that.setData({
              clock: "已经截止"
            });
            return;
          }
          setTimeout(function () {
            total_micro_second -= 1000;
            countdown(that);
          }
            , 1000)
        }
    
    // 时间格式化输出,如11天03小时25分钟19秒  每1s都会调用一次
      function dateformat(micro_second) {
           // 总秒数
           var second = Math.floor(micro_second / 1000);
           // 天数
           var day = Math.floor(second/3600/24);
           // 小时
           var hr = Math.floor(second/3600%24);
           // 分钟
           var min = Math.floor(second/60%60);
           //
           var sec = Math.floor(second%60);
          return day + "天" + hr + "小时" + min + "分钟" + sec+"秒";
      }
    
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
      id:'',
      result:[],
      end_time:'',
      clock:''
      },/**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
      var that = this;
        wx.request({
          url: 'https://m.******.com/index.php/Home/Xiaoxxf/activity_detail?a_id='+options.id,//不含富文本html
          data: {},
          method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
          header: {
            'Content-Type': 'application/json'
          },
          success: function (res) {
            that.setData({
              common: res.data,   //一维数组,全部数据
              end_time: res.data.end_time    //项目截止时间,时间戳,单位毫秒
            })
            console.log(that.data.common);
            console.log('结束时间:' + that.data.end_time);
          },
          fail: function (res) { },
          complete: function (res) { },
        }),    
    //调用上面定义的递归函数,一秒一刷新时间
      countdown(that);
    },
    
    
    
    
    4、拿去用吧,不懂的下面留言。
  • 相关阅读:
    STL堆算法性能分析与优化方法(GCC4.4.2 stl_heap.h源代码分析与改进方案)
    POJ 1631 Bridging Singnals
    一个用于读unicode文本的迭代器(iterator)
    常用文本压缩算法及实现(To be finshed!)
    volatile语义及线程安全singleton模式探讨
    C++实现的huffman与canonical huffman的压缩解压缩系统,支持基于单词的压缩解压缩
    linux环境下 C++性能测试工具 gprof + kprof + gprof2dot
    多线程统计多个文件的单词数目C++0x多线程使用示例
    python嵌入C++ boost.python如何在C++中调用含有不定长参数tuple变量和关键字参数dict变量的函数
    boost.python入门教程 python 嵌入c++
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/7001898.html
Copyright © 2011-2022 走看看