今日总结 – 微信小程序的特殊处理

最近在开发一个微信小程序的应用,发现一个很神奇的情况从后端传来的时间格式:2020-07-29T11:21:04.254,在wxs中通过getDate 在安卓Android中能很准确地将每个时间点分离出来,而在模拟器上苹果IOS也能顺利分离,问题就是在苹果IOS的真实设备上则出现分离的时间竟然多了8个小时,在网上一堆理论,解决的方法也五花八门;最后根据网上的解决方案没有很好的解决。那只能自己出手吧,其实出手也很简单,既然你分离出来的小时多了8小时,我直接把传过的格式的小时挑出来就是了。好吧上代码。

var formatNumber = function(val1) {    
    var realDate = getDate(val1);   
    var year = realDate.getFullYear();
    var month = realDate.getMonth() + 1 < 10 ? "0" + (realDate.getMonth() + 1) : realDate.getMonth() + 1;
    var day = realDate.getDate() < 10 ? "0" + realDate.getDate() : realDate.getDate();
    var hour = realDate.getHours() < 10 ? "0" + realDate.getHours() : realDate.getHours();
    var minute = realDate.getMinutes() < 10 ? "0" + realDate.getMinutes() : realDate.getMinutes();
    var second = realDate.getSeconds() < 10 ? "0" + realDate.getSeconds() : realDate.getSeconds();
    var Ihour=val1.split('T')[1].split(':')[0];   
    return year + "年" + month + "月" + day + "日" + Ihour + "时" + minute + "分";
  }

崇上简单直接的解决方法,这个方法在在安卓和苹果都能通用,不用像网上的教程那样搞一堆的判断。。当然这个原创的,希望你能记得我的付出吧。

接下来又遇到一个问题就,因为我这个小程序是通过云转发提交;不知道什么原因(有可能是用户点击多次的缘故),一条数据偶尔会出现重复,那怎么解决呢。就不用用户提交的次数太频繁。借用网上的间隔1分钟来提交,方法是可行的。

 var m = new Date().getMinutes().toString();
 if (m == wx.getStorageSync('m')) { 
 wx.showToast({
        icon: 'none',
        title: '请稍等1分钟后再提交!',
 });
 return false;
 }
 wx.setStorageSync('m', m)

这样就完美解决1分钟内不能提交的问题;但这时候又有个提议就是将间隔等待的时间改为15秒的,这个就麻烦点;思前想后,本来是以为用毫秒来计算,但又担心刚好60毫秒怎么办,如果用当前的时间来区别又担心安卓和苹果的时间格式。。后来终于想到用时间戳来处理,怎么处理,看代码吧。

 var timestamp = Date.parse(new Date());
 timestamp = timestamp / 1000;
 var z = timestamp; 
 if (z - wx.getStorageSync('z') < 0) {
 wx.showToast({
        icon: 'none',
        title: '请稍等15秒后再提交!',
 });
 return false;
 }
 wx.setStorageSync('z', z+15)

整个思路就是用时间搓来进行对比,当前的时间搓对比+15秒后的时间搓,如果正数的就代码已经过了,不过就没到。虽然这个不知道是否最好的,但解决了我的问题了。

再分享一个小技巧,由于小程序对图片使用了缓存,所以在调用需要更新的图片后面最好加参数,可以参数看你服务器的配置,可以是随机数也可以固定值,但固定值估计也会变缓存的;当然如果经常变的就随机值;暂时就分享到这里吧。

-完-

正文完