js中日期格式化常用方法

12,839 阅读2分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

任何语言中都会有对时间相关处理的方法,JavaScript中当然也有很多时间相关的方法,但是平时我们用到的很少,像我就是,总是记不住,用到的时候就去搜一下,但是网上推荐的总是类似的文章,有时候就会错过很多好用的方法,今天就来总结一下相关的方法,用的时候再也不愁了。

日期格式化

toLocaleDateString()

toLocaleDateString() 是我个人很喜欢的一种日期格式化的方法,原因就是他很方便我们无须像传统方法那样,单个的获取年月日,然后拼接起来。

let time = new Date()
time.toLocaleDateString() // "2021/8/22"

但是遗憾的是,这一方法在各浏览器上的表现可能有所不同,我这里没有测试,如果只用某个浏览器的话,可以使用此方法。

toTimeString()

这个方法与上面的方法相对应,上面的方法是获取日期的,这个是获取时间的

let time = new Date()
time.toTimeString() // "23:53:58 GMT+0800 (中国标准时间)"

toLocaleString()

还有一个二合一的,获取日期与时间

let time = new Date()
time.toLocaleString() // "2021/8/22 上午11:55:26"
time.toLocaleString('chinese',{ hour12: false }) // 24小时制

传统方法

这里也记录一下传统方法获取日期时间方法

function getNowFormatDate() {
  var date = new Date();
  var seperator1 = "-";
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var strDate = date.getDate();
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = "0" + strDate;
  }
  var currentdate = year + seperator1 + month + seperator1 + strDate;
  return currentdate;
}

兼容性问题

这里记录一下一个兼容问题,有时候后端返回时间可能会返回这样的格式2021-08-09 18:00:00,然后如果我们需要获取到想对应的时间格式的时候,就会用到下面的方法

new Date('2021-08-09 18:00:00')

但是我在用的时候就发现了一个兼容性的问题,在Windows平台上,上面的方法会正常运行,但是在Mac系统的safari浏览器上,会出现问题

// safari
new Date('2021-08-09 18:00:00') // -> Invalid Date

苹果手机上会不会出现相关问题我没有尝试,不过猜测可能会有一样的表现,那是因为Safari浏览器并不支持这样的时间格式,我们需要将上面的时间格式转换为202/08/09 18:00:00

let time = '2021-08-09 18:00:00'
time = time.replace(/-/g, '/')
console.log(new Date(time)) // -> Mon Aug 09 0202 18:00:00 GMT+0800 (CST) = $3