JavaScript实现日期格式化的操作详解

 更新时间:2023年05月25日 14:35:28   作者:夜雨炊烟  
在我们做业务开发的漫长岁月里,会多次跟时间打交道,相信大多数小伙伴对日期格式化也并不陌生,本文简单记录了JavaScript实现日期格式化的过程,以及一些拓展,希望对大家有所帮助

对,就是实现日期格式化,在我们做业务开发的漫长岁月里,会多次跟时间打交道,相信大多数小伙伴对都写过类似倒计时的功能,那么对于日期格式化相信也并不陌生,这里简单记录一下实现日期格式化的过程,以及一些拓展。

在实现之前可以先了解下Date,下面简单介绍一下Date对象包含的一些属性和方法。

Date

Date作为JavaScript标准内置对象,创建的唯一方法就是通过new操作符 通过new Date()来显示当前时刻的日期和时间,否则会被当做常规函数调用,返回一个字符串。

let timer = new Date() // Date()构造函数
console.log("timer", typeof (timer)) // object

let timer = Date()
console.log("timer", typeof (timer)) // string

属性

Date.prototype

可以为Date对象添加属性,这个下面会详细介绍

Date.length

Date.lenght的值为7。这是Date()构造函数可以接受的参数个数,这7个参数分别为:centuryyearmonthdayhourminutesecond

方法

1.Date.now()

表示从1970-1-1 00:00:00 UTC(世界标准时间)至今所经过的毫秒数,也就是当前所在时间的毫秒数。

2.Date.parse()

解析日期字符串,获取该字符串与1970-1-1 00:00:00之间所经过的毫秒数。

3.Date.UTC()

Date.parse()不同的是,该方法接受长度最长与Date()构造函数参数长度相同的参数,返回1970-1-1 00:00:00 UTC之间所经过的毫秒数。

实例

上面说到Date.prototype属性,在所有Date实例中都继承自该属性,修改Date构造函数的原型对象会影响所有的Date实例。

注意:示例输出参考时间节点 2023-05-24 18:21:31:12 周三

实例属性

1.Date.prototype.constructor

返回创建了实例的构造函数,默认是 Date构造函数。

let timer = new Date()

2.Date.prototype.getDay()

返回一周中的第几天,默认0星期天。

timer.getDay() // 3

3.Date.prototype.getFullYear()

返回当前时间对应的年。

timer.getFullYear()// 2023

4.Date.prototype.getMonth()

返回当前时间所对应的月,需要注意的是月份从0开始,表示一年中的第一个月。

timer.getMonth() + 1 // 5

5.Date.prototype.getDate()

返回当前时间对应的日。

timer.getDate() // 24

6.Date.prototype.getHours()

返回当前时间对应的小时(0-23)。

timer.getHours() // 18

7.Date.prototype.getMinutes()

返回当前时间对应的分钟(0-59)。

timer.getMinutes() // 21

8.Date.prototype.getSeconds()

返回当前时间对应的秒(0-59)。

timer.getSeconds() // 31

9.Date.prototype.getMilliseconds()

返回当前时间对应的毫秒数(0-999)。

timer.getMilliseconds() // 12

10.Date.prototype.getTime()

返回当前时间对应的时间戳(毫秒数),距离初始时间1970年01月01日00时00分00秒的间隔,小于这个时间会显示负数。

new Date(timer).getTime() // 1684923691012

11.Date.prototype.valueOf()

返回当前时间的时间戳,官方解释是:返回一个Date对象的原始值

newDate.valueOf() // 1684923691012

有了上面的这些基础知识就可以来实现日期格式化了,如果想要多了解的话可以参考Date-MDN

实现日期格式化

还是以上面的时间节点为例:2023-05-24 18:21:31:12

假如这是一个日期格式的字符串

let date = '2023-05-24 18:21:31:12'
let timer = new Date(date) // 转为日期对象
let year = timer.getFullYear()
let month = timer.getMonth() + 1
let day = timer.getDate()
let hour = timer.getHours()
let minutes = timer.getMinutes()
let seconds = timer.getSeconds()

console.log(`当前时间:${year}年${month}月${day}日 ${hour}时${minutes}分${seconds}秒`)
// 当前时间:2023年5月24日 18时21分31秒

处理得到结果后,可以进一步优化,进行复用,将这些方法封装成一个函数进行调用

let date = '2023-05-24 18:21:31:12'
getDate(date)
function getDate(date) {
  let timer = new Date(date) // 转为日期对象
  let year = getZero(timer.getFullYear())
  let month = getZero(timer.getMonth() + 1)
  let day = getZero(timer.getDate())
  let hour = getZero(timer.getHours())
  let minutes = getZero(timer.getMinutes())
  let seconds = getZero(timer.getSeconds())

  console.log(`当前时间:${year}年${month}月${day}日 ${hour}时${minutes}分${seconds}秒`)
  // 当前时间:2023年05月24日 18时21分31秒
}
// 如果小于10进行补零的参数,同样封装一个函数
function getZero(zero) {
  return zero < 10 ? '0' + zero : zero
}

到这里,日期格式化处理完成,下面是一些扩展的硬核知识

扩展

思考

我们注意的是在上述日期字符串中是一个标准的日期格式,这个时候你可能会有疑惑,如果是时间戳呢?如果是标准时间呢?

如果是标准时间跟上述日期字符串处理等同,如果是时间戳需要先转换为日期格式,转换方式可以先将时间戳翻入日期对象中,然后就可以正常进行格式化处理。

let dateTime = '1684979976140'
let newDate = new Date(+dateTime) // 如果时间戳是字符串的话使用 + 进行转换

不管什么时候字符串首先都需要通过Date() 构造函数进行处理成一个日期对象格式,才可以进行后续的操作。

需要注意的是时间戳如果是上述13位表明最终取到的是精确到秒的日期,如果大于13位就相当于取到毫秒级那么就需要在原来基础上 *1000

日期转换为时间戳

根据Date-MDN文档,我们可以发现有三种方式可以将日期转换为时间戳格式

let dateTime = '2023-05-24 18:21:31:12'
let newDate = new Date(dateTime)

newDate.getTime() // 1684923691012
newDate.valueOf() // 1684923691012
Date.parse(dateTime) // 1684923691012

以上就是JavaScript实现日期格式化的操作详解的详细内容,更多关于JavaScript日期格式化的资料请关注脚本之家其它相关文章!

相关文章

  • js之事件冒泡和事件捕获详细介绍

    js之事件冒泡和事件捕获详细介绍

    事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别,有需要的朋友可以参考一下
    2013-10-10
  • 基于three.js实现简易照片墙效果

    基于three.js实现简易照片墙效果

    这篇文章主要为大家详细介绍了基于three.js实现简易照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)

    suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)

    suggestion开发小结以及对键盘事件的总结(针对中文输入法状态),需要的朋友可以参考下。
    2011-12-12
  • 微信小程序拖拽排序列表的示例代码

    微信小程序拖拽排序列表的示例代码

    这篇文章主要介绍了微信小程序拖拽排序列表的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • js+html5实现复制文字按钮

    js+html5实现复制文字按钮

    这篇文章主要为大家详细介绍了js+html5实现复制文字按钮,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • js对象数组按属性快速排序

    js对象数组按属性快速排序

    前一篇《关于selector性能比赛》中提到,目测觉得在$("div,p,a")这样有逗号时,sizzle耗时异常(600多个元素,花了200ms),说是它可能没有优化ie下的排序。
    2011-01-01
  • javascript 浏览器类型和版本号检测代码(兼容多浏览器)

    javascript 浏览器类型和版本号检测代码(兼容多浏览器)

    果对javascript了解不是特别深入的话,很容易就会写出不兼容的代码(就像我),这时候就得判断浏览器了。比如事件侦听、一些鼠标和键盘事件、Range等,一些都会不一样.下面列出几种常用的检测浏览器方法,以飨观众!
    2010-04-04
  • prototype框架中美元符号$用法分析

    prototype框架中美元符号$用法分析

    这篇文章主要介绍了prototype框架中美元符号$用法,结合实例形式较为详细的分析了$符号的使用技巧与相关注意事项,需要的朋友可以参考下
    2016-01-01
  • JavaScript常见事件对象与操作实例总结

    JavaScript常见事件对象与操作实例总结

    这篇文章主要介绍了JavaScript常见事件对象与操作,结合实例形式总结分析了javascript针对DOM、IE及跨浏览器事件对象的相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • js实现放大镜特效

    js实现放大镜特效

    这篇文章主要为大家详细介绍了js实现放大镜特效,简单实用的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论