Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >将 Date对象 转化为指定格式详解 —— 关于Date对象那些事(番外)

将 Date对象 转化为指定格式详解 —— 关于Date对象那些事(番外)

作者头像
celineWong7
发布于 2020-11-05 10:51:57
发布于 2020-11-05 10:51:57
2.5K00
代码可运行
举报
文章被收录于专栏:web前端踩坑web前端踩坑
运行总次数:0
代码可运行

关于Date对象那些事 一文中的第一节,我们就给出了转换日期指定格式的方法。 但是这个方法中,有些地方对于初学者可能有点费解,尤其是正则部分。此处对其做个详解。

1. 获取当前日期

获取当前日期时间,我们知道通过方法 new Date() 就可以得到,但是获取到是一个标准格式时间 Fri Jan 18 2019 13:56:47 GMT+0800 (中国标准时间)。但通常我们更渴望得到 2019-01-18 13:56:47 或者 2019/01/18 13:56:47 这种格式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var d = new Date(); // 获取当前时间
    console.log(d); // Fri Jan 18 2019 14:00:01 GMT+0800 (中国标准时间)
    console.log(typeof d); // "object"

2.获取特定格式的日期猜想

想要通过截取标准格式时间是不太理想的,因为那是一个对象,不好进行字符串操作。即使转串后可以截取到,但总不太靠谱。于是,我们就想通过Data内置对象方法,把年、月、日、小时、分钟、秒,一一取出来,然后做拼接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var yy = d.getFullYear(); // 年
    var mm = d.getMonth() + 1; // 月
    var dd = d.getDate(); // 日
    var hh = d.getHours(); // 小时
    var min = d.getMinutes(); // 分钟
    var ss = d.getSeconds(); // 秒
    var qq = Math.floor((d.getMonth() + 3) / 3); // 季度
    var sss = d.getMilliseconds(); // 毫秒

    console.log("当前时间是:",yy + "-" + mm + "-" +  dd + " " + hh + ":" + min + ":" + ss); // 当前时间是: 2019-1-dd 14:10:21
    console.log("当前季度是:",qq); // 当前季度是: 1
    console.log("当前毫秒数是:",sss); // 当前毫秒数是: 366

注意:getMonth()返回的范围是0-11,所以需要累加1.

我们把这个方法封装成一个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * formatDate
     * @return {string}
     */
    function formatDate(){
        var yy = d.getFullYear(); // 年
        var mm = d.getMonth() + 1; // 月。
        var dd = d.getDate(); // 日
        var hh = d.getHours(); // 小时
        var min = d.getMinutes(); // 分钟
        var ss = d.getSeconds(); // 秒
        var qq = Math.floor((d.getMonth() + 3) / 3); // 季度
        var sss = d.getMilliseconds(); // 毫秒
        return yy + "-" + mm + "-" +  dd + " " + hh + ":" + min + ":" + ss); 
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 // 调用方法
formatDate(); //  2019-1-dd 14:10:21

3. 最终方案及详解

上面的函数确实能重复调用了,但是不过灵活,复用性不强。我们希望能带入参数,用以说明想要指定的日期格式,然后返回对应的日期格式。

这就不得不用上正则相关方法。具体演练过程这里就不说明,我们直接分析下面方案的实现过程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * formatDate方法,将 Date 转化为指定格式的String
     * @param {String} a 指定格式的字符串,例如 "yyyy-M-d h:m:s"
     * @return {String} 匹配指定格式的日期时间字符串
     * 说明:月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
     * 例子:   
     * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423   
     * (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18  
     */
    function formatDate(a){
        var d = new Date();  // 获取当前时间
        // 构造对象o,里面存储当前时间对应的年、月、日、时、分、秒、季度、毫秒参数
        var o = {
            "M+": d.getMonth() + 1,
            "d+": d.getDate(),
            "h+": d.getHours(),
            "m+": d.getMinutes(),
            "s+": d.getSeconds(),
            "q+": Math.floor((d.getMonth() + 3) / 3),
            "S": d.getMilliseconds()
        };
        // 获取年份
        if (/(y+)/.test(a)) a = a.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length));

      // 获取其他
        for (var k in o) {
            if (new RegExp("(" + k + ")").test(a)) a = a.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
        return a;
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 // 调用方法
console.log(formatDate("yyyy-M-d")); //  2019-1-18

代码说明:

  1. 获取年份部分: (1) /(y+)/是一个正则表达式,/(y+)/.test(a) 是判断参数a中是否有一个或多个字符 y,若有,返回true。 (2) RegExp是一个对象(函数对象),它是一个全局对象。RegExp.$1是全局属性,当执行任意正则表达式匹配操作时,JavaScript会自动更新RegExp上的全局属性。

补充说明:

  1. 关于 RegExp 对象以及它的静态属性 $1可以参考 MDN: RegExp.$1-$9csdn: JavaScript RegExp.$1-$9 属性详解
  2. 取子串方法语法:substr(start, length)

4. 拓展

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date.prototype.Format = function(a) {
    var o = {
        "M+": this.getMonth() + 1,
        "d+": this.getDate(),
        "h+": this.getHours(),
        "m+": this.getMinutes(),
        "s+": this.getSeconds(),
        "q+": Math.floor((this.getMonth() + 3) / 3),
        "S": this.getMilliseconds()
    };
    if (/(y+)/.test(a)) a = a.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(a)) a = a.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
    }
    return a
};

// 调用方法
console.log(new Date().Format("yy-MM-dd hh:mm:ss"));//19-01-18 15:04:30
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Js Date日期格式和字符串的相互转化「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137130.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
1.9K0
JavaScript 获取 2 天之后的日期代码实例
/** *对Date的扩展,将 Date 转化为指定格式的String *月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, *年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) *例子: *(new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 *(new Date()).Format("yyyy-M-d h:m:s.S")
一个会写诗的程序员
2018/09/12
7760
js日期格式化
js日期格式化 每次遇到日期格式化都要去网上搜一次,这次认真做次笔记。 <html> <head> <script> function test(){ //Js获取当
河岸飞流
2019/09/11
11.8K0
js日期格式化
javascript Date format(js日期格式化)
方法一:这个很不错,好像是 csdn 的 Meizz 写的: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) // 例子: // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
空空云
2018/09/27
7.8K0
关于Date对象那些事
获取当前日期时间,我们知道通过方法 new Date() 就可以得到,但是获取到是一个标准格式时间 Fri Jan 18 2019 13:56:47 GMT+0800 (中国标准时间)。但通常我们更渴望得到 2019-01-18 13:56:47 或者 2019/01/18 13:56:47 这种格式。
celineWong7
2020/11/05
8590
常用的工具函数 (不定时更新)
日期转换 /** * @param date 日期 * @param fmt 需要格式化的形式 * @returns {*} * 将 Date 转化为指定格式的String * 月(M)、日(d)、小时(h)、分(m)、秒(s) 可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) * eg: * DateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.S") ==> 2006
yangdongnan
2020/01/14
5270
一些时间的处理
let BGT = $(o.beginT).val(); let EDT = $(o.endT).val(); spanAddCls(3); // 获取点击日期, let date = statis.dvalue.toString(); let selectDate = date.substring(0,4)+'-'+date.substring(4,6)+'-'+date.substring(6,8);
xing.org1^
2018/05/17
5780
手把手教你封装一个日期格式化的工具函数
最近还是在做那个练习的小项目,做完接收数据并渲染到页面上的时候,发现后端小伙伴又在给我找活干了欸,单纯的渲染这当然是小kiss啦,可这个字段是个什么东西?
是乃德也是Ned
2022/12/17
3450
手把手教你封装一个日期格式化的工具函数
EasyUI 时间格式化「建议收藏」
var unixTimestamp = new Date(value);
全栈程序员站长
2022/08/26
6540
Date.prototype.format
Date.prototype.format = function(format){
李才哥
2019/07/23
9620
Date.prototype.format
js获取当前时间的年月日时分秒以及时间的格式化
1.获取当前时间 var myDate = new Date(); 2.获取时间中的年月日时分秒 myDate.getYear(); // 获取当前年份(2位) myDate.getF
青梅煮码
2023/03/13
3.7K0
vue时间日期格式化
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142754.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
9410
My97Date控件设置默认时间
需求:设置开始时间和结束时间初始化时间隔为一周 <input id="startTime" name="startTime" type="text" style="width: 45%" class="Wdate" onClick="WdatePicker({maxDate: $('#endTime').val(),dateFmt:'yyyy-MM-dd' })" ignore="ignore"/> <input id="endTime" name="endTime" type="text" style=
崔笑颜
2020/06/08
1.3K0
nodejs时间工具类
/** * * @fmt 格式化字符串 * @Date 为需要格式化的日期 * * 示例:format(new Date(),'yyyy-MM-dd hh:mm:ss'); * 返回值为字
用户1141560
2017/12/26
1.7K0
自定义一个 Date 处理函数
package com.ht.core.web; import java.text.SimpleDateFormat; import java.util.Date; /** * * @author: SHF * @date: 2017年11月21日 上午10:38:01 * @Description: 返回一个时间戳 * 自定一个日期处理类 * return: 返回当前日期加时间的STRING 格式:20170101202334 */ public class DateTimeT
用户5927264
2019/07/31
5700
封装格式化日期工具函数
后端服务器数据一般会返回时间戳,我们可以封装一个工具函数用来将时间戳转化为要展示的时间 utils.js /** * Parse the time to string * @param {(Object|string|number)} time * @param {string} cFormat * @returns {string} */ function parseTime(time, cFormat) { if (arguments.length === 0) { return
peng_tianyu
2022/12/15
7020
jeDate日期控件在项目中实际应用
需求: 1:可提供日期不超过当前日期或者(验证选中日期是否超过今天) 2:日期验证 3:input表格里面获取当前系统默认日期 4:选着日期点击选中后点确定按钮才关闭 5:验证结束日期大于开始日期
王小婷
2019/09/20
6740
jquery获取当前日期并且格式化
1.制定Format规则 //时间格式化问题 Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "H+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+":
用户1220053
2019/05/26
3.9K0
vue项目里的日期格式化
在项目中,我们经常需要把后台传回的日期进行格式化,可以在common里定义一个公共的js 1 export function formatDate (date, fmt) { 2 if (/(
庞小明
2018/03/29
2.4K0
vue项目里的日期格式化
ASP.MVC时间类型json数据处理
      服务端返回DateTime属性如果用自带的json方法返回的数据如下: 有2种办法解决一种是采用服务端解决方案,一种是使用前端解决方案 1.前端解决方案 第一步:对Date进行扩展 /
用户1055830
2018/01/18
1.8K0
ASP.MVC时间类型json数据处理
相关推荐
Js Date日期格式和字符串的相互转化「建议收藏」
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验