JS

时间字符串验证

首先 yup 只认 ISO,moment 则可以实现更多的格式验证

类型名 格式 说明
ISO 8601 一般:2020-12-05T05:33:19Z 东八区:2004-05-03T17:30:08+08:00 国际标准化组织的日期和时间的表示方法,这种格式是最常用的格式。
RFC2822 1992/02/12 12:23:22+0800 符合rfc2822格式的时间
格林威治标准时间GMT Fri Jul 20 2018 00:00:00 GMT+0800 (中国标准时间) 格林威治的子午线作为划分地球东西两半球的经度零度,并作为时间的零点
世界协调时间UTC Mon, 29 Apr 2019 09:52:21 GMT 经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密
Unix时间戳 以秒为单位:1607150827 以纳秒为单位:1607150827857990329 是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。

作者:xingo
链接:https://zhuanlan.zhihu.com/p/331748448
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

ISO

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
ISO(ISO 8601 Extended Format)格式的字符串: YYYY-MM-DDTHH:mm:ss.sssZ。时区总是UTC(协调世界时),加一个后缀“Z”标识。
image.png
yup 可以进行简单的验证,且默认异步。

  1. const res = await yupDate().isValid(string);

如果有moment,默认使用moment,尤其是非ISO固定格式的时间字符串,可以使用moment的自定义格式来验证:

  1. moment(field, 'YYYYMMDD').isValid()

Js 原生常用

js 原生可能会受到不同平台的实现产生影响,需要验证:
Date.now() 返回时间戳

  1. Date.now()
  2. 1617766661692

new Date() 默认返回 GMT

  1. new Date()
  2. Wed Apr 07 2021 11:39:50 GMT+0800 (中国标准时间)

new Date(dateString) 可接受的参数:
Date.parse(dateString) == new Date(dateSteing)
dateString同时支持 RFC2822 和 ISO
image.png

Date 对象内置方法:

  1. (new Date()).toDateString() // 返回仅日期
  2. "Wed Apr 07 2021"
  3. (new Date()).toISOString() // 返回 ISO 格式
  4. "2021-04-07T03:41:21.349Z"
  5. (new Date()).toUTCString() // 返回 UTC 格式
  6. "Wed, 07 Apr 2021 03:42:03 GMT"
  7. (new Date()).getTime() // 返回 时间戳
  8. 1617766996218