移动端 date 类型输入框不识别正确格式??的字符串.

2019-04-24 16:34:27 +08:00
 TomVista

将'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*/,'');
}
1007 次点击
所在节点    问与答
9 条回复
airyland
2019-04-24 17:44:41 +08:00
我觉得标准时间操作就不要用正则了,new Date 直接解析或者用 dayjs 来操作。
whypool
2019-04-24 18:05:27 +08:00
ios 还有用-不能转,必须用 /
TomVista
2019-04-25 07:38:05 +08:00
@airyland 🤣我去看看这个库,脑子抽风,没想出来 Date 就可以解决.

@whypool 我是 android 设置的 iphone ua,浏览器 ua 不影响 js 引擎.我再看看为什么.很奇怪的错误.
TomVista
2019-04-25 08:06:55 +08:00
@airyland 问下不用正则的理由.
weixiangzhe
2019-04-25 09:33:04 +08:00
推荐 dayjs 吧,ios 不认 2018-02-19 这种的
TomVista
2019-04-25 10:40:40 +08:00
@weixiangzhe 嗯,明白了,脑子没转过来,还要兼容 ios🤦‍♂️
iamkun
2019-04-25 11:15:47 +08:00
`dayjs('2019-01-28T00:00:00').format() ` 帮你搞定一切 😁
TomVista
2019-04-26 15:22:57 +08:00
@iamkun
@weixiangzhe
@airyland

dayjs(somedate).format() 在不同的浏览器由于兼容性会返回不同格式的日期吗?我这里没有测试环境.
TomVista
2019-04-26 15:32:36 +08:00
我这里测试 谷歌浏览器不支持 yyyy/mm/dd 格式的日期赋值给<input type='date'>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/558302

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX