/** * YYYY-MM-dd */ function formatDate(date) { let year = date.getFullYear() let month = date.getMonth() + 1 let day = date.getDate() return [year, month, day].map(formatNumber).join( '-' ); } |
function formatNumber(n) { n = n.toString() return n[1] ? n : '0' + n } |
//调用 let now = util.formatDate( new Date()); |
比如今天是2018-06-03,但now结果居然是“2018-06-02”
这种情况在近两个月内,发生过两次了,均是华为手机,且把小程序从“发现”页删除,重新扫描打开就好了。
还有一种现象是,出现问题的手机,下午获取的日期就又正确了,早上是错的。
什么原因?难道是代码问题?不可能是new Date()返回的值不对吧?
由于是客户手机,未知基础库版本,小程序后台限制最低是1.9.1
我来填一下这个坑 :
思路就是既然获取日期不对,那么我们就去获取时间戳,然后把时间戳换成日期,曲线操作嘛.
下面是代码逻辑:
let timestamp = new Date().getTime(); let myDate = timeStamp(timestamp); //转换一下时间戳
const timeStamp =(value)=>{ let date = new Date(value); //时间戳为10位需*1000,时间戳为13位的话不需乘1000 let year = date.getFullYear(); let month = ("0" + (date.getMonth() + 1)).slice(-2); let sdate = ("0" + date.getDate()).slice(-2); let hour = ("0" + date.getHours()).slice(-2); let minute = ("0" + date.getMinutes()).slice(-2); let second = ("0" + date.getSeconds()).slice(-2); // 拼接 let result = year + "-" + month + "-" + sdate; //let result = month + "." + sdate //+ ":" + second; // 返回 return result; }
呵呵呵,你明天看,会发现是前天的时间.
照这个逻辑,后天看应该就会发现忍者神龟了
时区问题,就比如你那个“2018-06-02”不是北京时间,是+0的时间
很有可能,准备找客户确认下,如果是时区问题就好说了
突然想到,如果是时区问题,为什么删除小程序,重新添加就好了?
这个问题以前在PC上遇到过。貌似是浏览器的时区出错了。重启一下就行了。小程序也是用浏览器运行的,估计底层问题一样吧。
最好是用户自己设置错了时区,还好说,如果是微信时区偶尔会错,那就必须得服务器返回时间了
看下是不是相差8小时整
解决了吗楼主,我也遇到也是华为手机 小程序根据时间请求数据第二天请求还是昨天数据,重新进入打开就没事了
我也写了个时间过滤器,在开发者工具上查看时间处理正确,在手机预览时错误。。。。
贴个代码看看
我的问题已经解决,正如楼下 @人生若只如初见 说的, ios 下不识别 2018-06-05 19:01:10 时间格式,我又过滤了一遍改成 2018/06/05 19:01:10 ,在 ios 下问题解决!
经过测试android和ios均采用2018/06/05 19:01:10这种格式即可做到兼容。
顶
趁着这贴子看的人多,再发个最近碰到的奇怪plus+问题贴
在社区已沉的帖子地址,点这里
手机系统时间调过没
没有,手机系统显示的时间都是对的
为什么不是后台返回时间?前台的时间可以夏季吧改
正在考虑中,没想到会遇到这种问题。。。
华为 还有这个问题么......
两个都是华为手机P9,不知道是不是巧合
这个问题 我不清楚 不过 你不做ios 的兼容么 ios 不是不识别 2018-06-05 这样格式的么 要改成2018/06/05这样的?
日期是通过new Date()获取,然后程序拼接,只是显示用
两个月前发现此问题了,就一个用户,没当回事,结果出现了第二个用户。。。
上面那个 老兄说的 其实可以考虑 让后台 返回时间 这样 这个问题 应该就不会出现了
还有这种事。。。。。。