vant v2.5.2
问题场景
利用calendar组件获得选取的日期值。按照官方demo,从confirm事件可获得选择的Date对象。在笔者的需求中,需要获得一个ISO格式的日期字符串的日期部分。根据es6中Date对象的API,toISOString是个对口的方便方法,但执行结果却获得上一天。
分析问题
这种现象,马上想到的是诡异。
通过在控制台上的测试,初步理解的现象。直接new Date()或new Date(year, month, day)得到的是GMT时间,但new Date(‘yyyy-MM-dd’)这种ISO字符串格式的构造方法得到的是本地时间。这决定某些Date直接调用toISOString方法获得的结果是与本地日期不稳定一致的。
再通过源码阅读:
以下代码是calendar的子组件Month的一项属性的声明——days,是可点击的日期格背后对应的数据封装。
days: function days() {
var days = [];
var year = this.date.getFullYear()