《Muse-UI日期兼容之iOS》

本文探讨了在iOS设备上使用Vue与Muse-UI日期控件出现的一天时间偏差问题,分析了时区与夏令时的影响,并提供了解决方案,包括日期格式调整与时间戳修正。

前言:

       本项目采用前端框架为Vue,组件库为Muse-UI,出现问题的控件为日期控件,在ios上日期会少一天,安卓手机正常。前后端以时间戳进行交互

正文:

        问题描述:时间戳为零点的情况

                                                       

        问题定位:时区问题

        巨人肩膀:《safari下使用getdate()方法获取到的时间比其他浏览器慢一天》

                           https://segmentfault.com/q/1010000018150366

         根源所在:chrome 遵循了夏令时。 所以1986至1991的规定时间段,chrome 都是用夏令时显示时间的.

         从1986年到1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。在夏令时开始和结束前几天,新闻媒体均刊登有关部门的通告。1992年起,夏令时暂停实行。

         目前解决方案:

         避过零点(3600 * 1000 * 6)

    dateChange (val, key) {
      this.$set(this.passData, key, (this.fmtDate(new Date(val).getTime()) + 3600 * 1000 * 6))
      this.$forceUpdate()
    },
    fmtDate (val) {
      let time = new Date(val)
      return Date.parse(new Date(time.getFullYear(), time.getMonth(), time.getDate()))
    },

         备注:目前日期不允许用户选择时间,只允许选择年月日,如果允许选择时间,这种方案有待商榷,可考虑更换控件或者前后端交互以日期的方式进行交互 

插曲:        

<1>

问题描述: 在ios上日期无法进行选择

解决方案: 将“-”修改为“/”

let time = new Date(val)

return new Date(time.getFullYear() + '/' + (time.getMonth() + 1) + '/' + time.getDate()).getTime()

<2>

问题描述:  在ios上日期差一天

解决方案:

fmtDate (val) {

let arr = val.split(/[- :]/)

let nndate = new Date(arr[0], arr[1] - 1, arr[2])

nndate = Date.parse(nndate)

return nndate

},

<3>

问题描述:   提交给后端数据格式为字符串,日期为大一个月

解决方案: 

fmtDate (val) {

let time = new Date(val)

return Date.parse(new Date(time.getFullYear(), time.getMonth(), time.getDate()))

}

格物:

                                                                                 时区的基本概念
        GMT(Greenwich Mean Time),即格林威治标准时,是东西经零度的地方。人们将地球人为的分为24等份,每一等份为一个时区,每时区横跨经度15度,时间正好为1小时。往西一个时区,则减去一小时;往东一个时区,则加上一小时。中国在东经120度上,(东经120°-东经0°)所得度数再除以15,即得8。
       UTC(Coordinated Universal Time),即世界协调时间,是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC比GMT来得更加精准。UTC的本质强调的是比GMT更为精确的世界时间标准,不过对于现行表款来说,GMT与UTC的功能与精确度是没有差别的。
       CST时间却同时可以代表如下 4 个不同的时区:
       Central Standard Time (USA) UT-6:00
       Central Standard Time (Australia) UT+9:30
       China Standard Time UT+8:00
       Cuba Standard Time UT-4:00
       可见,CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。
       DST(Daylight Saving Time),夏日节约时间,指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用,在英国则称为夏令时间(Summer Time)。
       PDT以及PST, PDT 是 Pacific Daylight Time 的缩写,美国夏季始于每年4月的第1个周日,止于每年10月的最后一个周日。夏令时比正常时间早一小时,与PDT时间相对应的是PST , Pacific Standard Time 。 夏时制结束后就是PST(太平洋标准时间),西八区,与北京时间(东八区)时差-16个小时。

结语:

        每个问题的发生都有其根源,找到本质,围绕本质,寻求解决方案

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值