JavaScript实战笔记(六) 日期格式化

简介: JavaScript实战笔记(六) 日期格式化

我们知道,在 JavaScript 中没有日期格式化的相关接口,因此使用起来很不方便

下面我们自己来封装一个函数,整体逻辑也很简单,就是使用正则表达式去替换

/**
 * 格式化日期
 * @param { Date }    date    待转换日期
 * @param { String }  pattern 格式字符串
 *  %y 两位数的年份表示
 *  %Y 四位数的年份表示
 *  %m 月份
 *  %d 天数
 *  %H 24 小时制小时数
 *  %I 12 小时制小时数
 *  %M 分钟数
 *  %S 秒数
 *  %a 简化的星期名称
 *  %A 完整的星期名称
 *  %b 简化的月份名称
 *  %B 完整的月份名称
 * @param { Boolean } padding 是否要补齐
 */
const formatDate = (date, pattern = '%Y-%m-%d %H:%M:%S', padding = true) => {
    if (!(date instanceof Date)) return ''
    const week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    const month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
    const paddingZero = (num, cnt, flag) => {
        if (!flag) return num
        let str = num + ''
        let len = str.length
        return (cnt <= len) ? num : Array(cnt - len + 1).join('0') + str
    }
    return pattern
        .replace(/%y/g, paddingZero(date.getFullYear() % 100, 2, padding))
        .replace(/%Y/g, paddingZero(date.getFullYear(), 4, padding))
        .replace(/%m/g, paddingZero(date.getMonth() + 1, 2, padding))
        .replace(/%d/g, paddingZero(date.getDate(), 2, padding))
        .replace(/%H/g, paddingZero(date.getHours(), 2, padding))
        .replace(/%I/g, paddingZero(date.getHours() % 12, 2, padding))
        .replace(/%M/g, paddingZero(date.getMinutes(), 2, padding))
        .replace(/%S/g, paddingZero(date.getSeconds(), 2, padding))
        .replace(/%a/g, week[date.getDay() - 1].slice(0, 3))
        .replace(/%A/g, week[date.getDay() - 1])
        .replace(/%b/g, month[date.getMonth()].slice(0, 3))
        .replace(/%B/g, month[date.getMonth()])
}

使用方法如下

let date = new Date()
let string = formatDate(date)
let GMTString = formatDate(date, '%a, %d %m %Y %H:%M:%S GMT')
console.log(string)    // 2020-06-11 21:18:30
console.log(GMTString) // Thu, 11 06 2020 21:18:30 GMT

目录
相关文章
|
18天前
|
JavaScript
Nest.js 实战 (十一):配置热重载 HMR 给服务提提速
这篇文章介绍了Nest.js服务在应用程序引导过程中,TypeScript编译对效率的影响,以及如何通过使用webpackHMR来降低应用实例化的时间。文章包含具体教程,指导读者如何在项目中安装依赖包,并在根目录下新增webpack配置文件webpack-hmr.config.js来调整HMR相关的配置。最后,文章总结了如何通过自定义webpack配置来更好地控制HMR行为。
|
1月前
|
缓存 中间件
Nest.js 实战 (九):使用拦截器记录用户 CURD 操作日志
这篇文章介绍了在Nest.js中如何实现记录用户CURD操作的需求。首先解释了什么是拦截器以及拦截器的作用,然后通过创建Prisma模型,添加Log模型,并通过编写LoggerInterceptor拦截器,实现了记录用户操作的功能。最后通过效果演示和总结,强调了使用拦截器实现此功能的有效性。
|
9天前
Nest.js 实战 (十三):实现 SSE 服务端主动向客户端推送消息
这篇文章介绍了在Nest.js应用中使用Server-Sent Events (SSE)的技术。文章首先讨论了在特定业务场景下,为何选择SSE而不是WebSocket作为实时通信系统的实现方式。接着解释了SSE的概念,并展示了如何在Nest.js中实现SSE。文章包含客户端实现的代码示例,并以一个效果演示结束,总结SSE在Nest.js中的应用。
Nest.js 实战 (十三):实现 SSE 服务端主动向客户端推送消息
|
21天前
|
SQL 运维 监控
Nest.js 实战 (十):使用 winston 打印和收集日志记录
这篇文章介绍了在Nest服务中如何使用Winston记录日志。文章首先强调了日志记录在后台服务中的重要性,接着提到Nest默认的内部日志记录器,并指出可以通过@nestjs/common包中的Logger类来全面控制日志系统的行为。文章还提到,为了在生产环境中实现更高级的日志功能,可以使用如Winston之类的Node.js日志包。接下来,文章介绍了如何在Nest服务中使用Winston记录日志,包括安装相关依赖、创建winston配置文件以及实现简单的日志记录示例。最后,文章指出更高级的自定义日志功能需要读者自己去探索。
Nest.js 实战 (十):使用 winston 打印和收集日志记录
|
22天前
|
JavaScript 前端开发
JavaScript / TypeScript日期格式化(dateFormat)
这篇文章介绍了如何在TypeScript中创建和使用一个日期格式化函数`dateFormat`,支持多种日期格式的自定义,并提供了函数的实现代码和使用示例。
JavaScript / TypeScript日期格式化(dateFormat)
|
11天前
Nest.js 实战 (十二):优雅地使用事件发布/订阅模块 Event Emitter
这篇文章介绍了在Nest.js构建应用时,如何通过事件/发布-订阅模式使应用程序更健壮、灵活、易于扩展,并简化服务间通信。文章主要围绕@nestjs/event-emitter模块展开,这是一个基于eventemitter2库的社区模块,提供了事件发布/订阅功能,使得实现事件驱动架构变得简单。文章还介绍了如何使用该模块,包括安装依赖、初始化模块、注册EventEmitterModule、使用装饰器简化监听等。最后总结,集成@nestjs/event-emitter模块可以提升应用程序的事件驱动能力,构建出更为松耦合、易扩展且高度灵活的系统架构,是构建现代、响应迅速且具有高度解耦特性的Nest.
|
1月前
|
JavaScript 前端开发
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
这篇文章是JavaScript基础与实战教程的第一部分,涵盖了JavaScript的基本语法、标识符、数据类型以及如何进行强制类型转换,通过代码示例介绍了JS的输出语句、编写位置和数据类型转换方法。
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
|
25天前
|
JavaScript 数据安全/隐私保护 Python
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
26 4
|
22天前
|
前端开发 JavaScript 开发者
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例
本文提供了一个前端JS按钮点击事件、弹出式窗口和遮罩层的实战示例,包括HTML、CSS和JavaScript的具体实现代码,以及功能解析,演示了如何实现按钮点击后触发弹窗显示和遮罩层,并在2秒后自动关闭或点击遮罩层关闭弹窗的效果。
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例
|
25天前
|
JavaScript 前端开发 安全
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
32 2