技术经验分享:JavaScript实现Date()——日期格式化的三种常用方法

简介: 技术经验分享:JavaScript实现Date()——日期格式化的三种常用方法

Date( ) 介绍


Date( ) 基本使用


Date()日期对象是构造函数,必须使用new来调用我们的日期对象。


若Date()没有参数时 返回当前时间


若Date(timer)有参数时 返回参数设置的时间


参数写法:'2012-2-2 08:54:32'(字符串)


返回值格式:Sun May 28 2023 23:36:28 GMT+0800 (中国标准时间)


js


复制代码


// 无参数时


let dateW = new Date();


console.log('当前时间', dateW); // Sun May 28 2023 23:36:28 GMT+0800 (中国标准时间)


// 有参数时


let dateY = new Date('2012-2-2 08:54:32');


console.log('指定时间', dateY); // Thu Feb 02 2012 08:54:32 GMT+0800 (中国标准时间)


Date() 常用API


Date() 可以通过许多方法获取日期和时间的各个部分,在格式化时间时我们经常用到这些API。


js


复制代码


let date = new Date();


console.log(date.getFullYear()); //当前日期的年 2022


console.log(date.getMonth() + 1); //月份+1 由于月份是0-11计算 所以需要 +1


console.log(date.getDate()); // 日


console.log(date.getDay()); // 星期几 注意:星期日返回的是0


console.log(date.getHours()); // 时


console.log(date.getMinutes()); // 分


console.log(date.getSeconds()); // 秒


日期格式化


1.1 toLocaleString(原生方法)


Date 对象有一个 toLocaleString 方法,该方法可以格式化日期和时间,同时衍生出另外两种分别获得日期和时间的方法。


字段说明:


日期+时间: toLocaleString()


日期: toLocaleDateString()


时间: toLocaleTimeString()


参数说明 (非必填):


'en-US', { timeZone: 'America/New_York' }


en-US : 地区设置(String)


{ timeZone: 'America/New_York' }: 日期时间格式和时区信息(Object)


js


复制代码


let timer = new Date()


console.log(timer.toLocaleString()) // 日期+时间 2023/5/28 23:07:35


console.log(timer.toLocaleDateString()) // 日期 2023/5/28


console.log(timer.toLocaleTimeString()) // 时间 23:10:31


js


复制代码


// 两个参数:(地区设置,日期时间格式和时区信息)


console.log(time.toLocaleString('en-US', { timeZone: 'America/New_York' }))


// 打印结果 5/28/2023, 11:08:39 AM


1.2 字符串方法


string.padStart(字符串长度, 填充元素) : 用填充元素填充string字符串,使得产生的新字符串达到所设置的长度(参数一:字符串长度)。


padStart 从原字符串左侧开始填充


padEnd 从原字符串右侧开始填充


js


复制代码


let str = 'str'


str.padStart(5,'0') // "00str"


// 不指定填充元素时,以空字符串填充


str.padStart(5) // " abc"


// 填充元素超出指定长度时,从左->右对填充元素截取


str.padStart(6,'123465'); // "123str"


// 原字符串长度大于设定长度时,以原字符串长度为准 不截断原字符串


str.padStart(2); // "str"


1) 利用字符串进行日期格式化


js


复制代码


console.log(time.getFullYear().toString().padStart(4, '0')) // 年 2023


console.log((time.getMonth() + 1).toString().padStart(2, '0')) // 月 05


console.log(time.getDate().toString().padStart(2, '0')) // 日 29


console.log('星期' + (time.getDay() === 0 ? 7 : time.getDay())) // 周 星期1


console.log(time.getHours().toString().padStart(2, '0')) // 时 01


console.log(time.getMinutes().toString().padStart(2, '0')) // 分 19


console.log(time.getSeconds().toString().padStart(2, '0')) // 秒 55


2) 格式化函数封装


js


复制代码


let time = new Date()


// 定义格式化封装函数


function formaData(timer) {


const year = timer.getFullYear()


const month = timer.getMonth() + 1 // 由于月份从0开始,因此需加1


const day = timer.getDate()


const hour = timer.getHours()


const minute = timer.getMinutes()


const second = timer.getSeconds()


return ${pad(year, 4)}-${pad(month)}-${pad(day)} ${pad(hour)}:${pad(minute)}:${pad(second)}


}


// 定义具体处理标准


// timeEl 传递过来具体的数值:年月日时分秒


// total 字符串总长度 默认值为2


// str 补充元素 默认值为"0"


function pad(timeEl, total = 2, str = '0') {


return timeEl.toString().padStart(total, str)


}


// 调用函数


console.log(formaData(time)) // 2023-05-29 00:30:19


1.3 第三方库


除了以上方法外,还有很多第三方库可以用来格式化日期时间,最常用的主要为 Moment.js。


1)安装 Moment.js


js


复制代码


npm install moment


2)导入 Moment.js 模块(main.js)


js


复制代码


import moment from 'moment';


Vue.prototype.$moment = moment


3)格式化时间


js


复制代码


// this.$moment() 输出当前时间的moment对象


console.log(this.$moment().format('YYYY-MM-DD HH:mm:ss')); //代码效果参考:http://hnjlyzjd.com/hw/wz_24471.html

// 2023-05-29 00:30:19

其他处理方法


2.1 时间戳


date 时间戳(毫秒数):


获取date总的毫秒数,不是当前时间的毫秒数,而是距离1970年1月1日过了多少毫秒数。


获取方法:


valueof( ) 、 getTime( )


const timer = + new Date() 常用


Date.now( ) 低版本浏览器打不开


js


复制代码


let date = new Date();


// 写法一


console.log(date.valueOf()); //现在时间距离1970.1.1的毫秒数


console.log(date.getTime());


// 写法二


let date = +new Date();


console.log(date); //返回当前总的毫秒数


// 写法三


console.log(Date.now()); // H5新增 低版本浏览器打不开


倒计时函数封装


js


复制代码


function countDown(time) {


let dateNow = +new Date(); // 获取当前时间的毫秒数


let dateOver = +new Date(time); // 获取目标时间的毫秒数


let gapTime = (dateOver - dateNow) / 1000 // 由毫秒得到秒


let s = pad(parseInt(gapTime % 60)); // 秒数


let m = pad(parseInt(gapTime / 60 % 60)); // 分钟数


let h = pad(parseInt(gapTime / 60 / 60 % 24))//代码效果参考:http://hnjlyzjd.com/xl/wz_24469.html

; // 小时数

let d = pad(parseInt(cha / 60 / 60 / 24)); // 天数


return d + '天' + h + '小时' + m + '分钟' + s + '秒';


}


// 时间标准的处理函数


function pad(timeEl, total = 2, str = '0') {


return timeEl.toString().padStart(total, str)


}


// 调用函数


console.log(countDown('2122-5-19 8:00:00'));


作者:sevenBoy


链接:


来源:稀土掘金


著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章
|
17天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
39 1
|
1月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
2月前
|
缓存 监控 前端开发
JavaScript 实现大文件上传的方法
【10月更文挑战第17天】通过以上步骤和方法,我们可以实现较为可靠和高效的大文件上传功能。当然,具体的实现方式还需要根据实际的应用场景和服务器要求进行调整和优化。
|
17天前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
114 52
|
1月前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
1月前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
19天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
28 5
|
20天前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
24 1
|
1月前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
38 7
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
31 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效