将'2019-01-28T00:00:00'格式化成'2019-01-28'然后通过 vue v-model 绑定给 input,部分移动端浏览器认不出来.
被逼无奈花了 30 分钟看正则.
dateProgress_error('2019-01-28T00:00:00') === dateProgress_true('2019-01-28T00:00:00')
//true
原始数据
2019-01-28T00:00:00
错误的格式化函数
/**
* yyyy-mm-dd'T'hh-ss-dd =>yyyy-mm-dd
* @param {string} date
*/
function dateProgress_error(date) {
var newDate = new Date(date.replace('T', ' ')).toLocaleDateString();
// eslint-disable-next-line no-useless-escape
var tmp = newDate.split(/\//);
if (tmp.length === 1) {
return newDate;
}
if (tmp[1].length !== 2) {
tmp[1] = '0' + tmp[1];
}
if (tmp[2].length !== 2) {
tmp[2] = '0' + tmp[2];
}
return tmp.join('-');
}
正确的格式化函数
/**
* yyyy-mm-dd'T'hh-ss-dd =>yyyy-mm-dd
* @param {string} date
*/
function dateProgress_true(date) {
return date.replace(/T\S*/,'');
}
错误出在 String.property.split,在某些浏览器中 它会返回顺序完全相反的数组.
谷歌浏览器/火狐
'a,b,c'.split(/,/)==['a','b','c']
//true
移动端夸克/android5.1 flyme自带
'a,b,c'.split(/,/)==['c','b','a']
//true
1
airyland 2019-04-24 17:44:41 +08:00 1
我觉得标准时间操作就不要用正则了,new Date 直接解析或者用 dayjs 来操作。
|
2
whypool 2019-04-24 18:05:27 +08:00 1
ios 还有用-不能转,必须用 /
|
3
TomVista OP |
5
weixiangzhe 2019-04-25 09:33:04 +08:00 via iPhone 1
推荐 dayjs 吧,ios 不认 2018-02-19 这种的
|
6
TomVista OP @weixiangzhe 嗯,明白了,脑子没转过来,还要兼容 ios🤦♂️
|
7
iamkun 2019-04-25 11:15:47 +08:00 1
`dayjs('2019-01-28T00:00:00').format() ` 帮你搞定一切 😁
|
8
TomVista OP |
9
TomVista OP 我这里测试 谷歌浏览器不支持 yyyy/mm/dd 格式的日期赋值给<input type='date'>
|