最近在开发一个微信小程序的应用,发现一个很神奇的情况从后端传来的时间格式: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秒后的时间搓,如果正数的就代码已经过了,不过就没到。虽然这个不知道是否最好的,但解决了我的问题了。
再分享一个小技巧,由于小程序对图片使用了缓存,所以在调用需要更新的图片后面最好加参数,可以参数看你服务器的配置,可以是随机数也可以固定值,但固定值估计也会变缓存的;当然如果经常变的就随机值;暂时就分享到这里吧。
-完-