首页 > 编程语言 >JavaScript 格式化时间

JavaScript 格式化时间

时间:2023-06-29 14:36:37浏览次数:45  
标签:格式化 JavaScript dtArr YYYY 时间 ms date let null

function formatDate(date) {
  /**
   * 格式化日期
   * @param {Date|String} date 日期或日期字符串
   */
  function _isString(val) {
    return Object.prototype.toString.call(val) === '[object String]';
  }

  /**
   * 精确判断数据是否是 Date 类型
   * @param {Any} val 要判断的数据
   * @returns {Boolean} true:是;false:不是;
   */
  function _isDate(val) {
    return Object.prototype.toString.call(val) === '[object Date]';
  }
  let YYYY = null;
  let M = null;
  let MM = null;
  let D = null;
  let DD = null;
  let h = null;
  let hh = null;
  let m = null;
  let mm = null;
  let s = null;
  let ss = null;
  let ms = null;
  let ms2 = null;
  let ms3 = null;
  let ms4 = null;
  let dt = null;

  // 如果 date 是 String 类型
  if (date && _isString(date)) {
    // 真机运行时,如果直接用 new Date('YYYY-MM-DD hh:mm:ss') 会报 Invalid Date 错误,所以采用下面的方式创建日期
    let dtArr = date
      .replace(/\//g, '.')
      .replace(/-/g, '.')
      .replace(/:/g, '.')
      .replace(/T/g, ' ')
      .replace(' ', '.')
      .replace('Z', '')
      .split('.');

    let year = 2020;
    let month = 12;
    let day = 18;
    let hour = 0;
    let minute = 0;
    let second = 0;
    let millisecond = 0;

    // 年
    if (dtArr.length > 0 && !isNaN(dtArr[0])) {
      year = parseInt(dtArr[0]);
    }
    // 月
    if (dtArr.length > 1 && !isNaN(dtArr[1])) {
      month = parseInt(dtArr[1]);
    }
    // 日
    if (dtArr.length > 2 && !isNaN(dtArr[2])) {
      day = parseInt(dtArr[2]);
    }
    // 时
    if (dtArr.length > 3 && !isNaN(dtArr[3])) {
      hour = parseInt(dtArr[3]);
    }
    // 分
    if (dtArr.length > 4 && !isNaN(dtArr[4])) {
      minute = parseInt(dtArr[4]);
    }
    // 秒
    if (dtArr.length > 5 && !isNaN(dtArr[5])) {
      second = parseInt(dtArr[5]);
    }
    // 毫秒
    if (dtArr.length > 6 && !isNaN(dtArr[6])) {
      millisecond = parseInt(dtArr[6]);
    }

    date = new Date(year, month - 1, day, hour, minute, second, millisecond);
  }

  // 如果 date 是 Date 类型
  if (date && _isDate(date)) {
    YYYY = date.getFullYear();
    M = date.getMonth() + 1;
    MM = M >= 10 ? M : '0' + M;
    D = date.getDate();
    DD = D >= 10 ? D : '0' + D;
    h = date.getHours();
    hh = h >= 10 ? h : '0' + h;
    m = date.getMinutes();
    mm = m >= 10 ? m : '0' + m;
    s = date.getSeconds();
    ss = s >= 10 ? s : '0' + s;
    ms = date.getMilliseconds();
    ms2 = ms;
    ms3 = ms;
    ms4 = ms;
    if (ms < 10) {
      ms2 = '0' + ms;
      ms3 = '00' + ms;
      ms4 = '000' + ms;
    } else if (ms < 100) {
      ms3 = '0' + ms;
      ms4 = '00' + ms;
    } else {
      ms4 = '0' + ms;
    }
  }

  // 返回的数据对象
  let result = {
    YYYY: YYYY,
    MM: MM,
    M: M,
    DD: DD,
    D: D,
    hh: hh,
    h: h,
    mm: mm,
    m: m,
    ss: ss,
    s: s,
    ms: ms,
    ms2: ms2,
    ms3: ms3,
    ms4: ms4,
    dt: date,
    f0: `${YYYY}.${MM}.${DD}`,
    f1: `${YYYY}-${MM}-${DD}`,
    f2: `${YYYY}年${M}月${D}日`,
    f3: `${YYYY}-${M}-${D} ${hh}:${mm}`,
    f4: `${h}:${m}:${s}`,
    f5: `${MM}-${DD}`,
    f6: `${YYYY}-${MM}`,
    f7: `${YYYY}年${M}月`,
    f8: `${h}:${m}`,
    f9: `${M}月${D}日`,
    ff: `${YYYY}-${M}-${D} ${hh}:${mm}:${ms2}`,
    notes:
      'YYYY(年),MM(月,补0),M(月,不补0),DD(日,补0),D(日,不补0),hh(时,补0),h(时,不补0),mm(分,补0),m(分,不补0),ss(秒,补0),s(秒,不补0),ms(毫秒,不补0),ms2(毫秒,补0到2位),ms3(毫秒,补0到3位),ms4(毫秒,补0到4位),其余的f1,f2,... 看格式就知道了!',
  };
  return result;
}

 

标签:格式化,JavaScript,dtArr,YYYY,时间,ms,date,let,null
From: https://www.cnblogs.com/ZeroShiro/p/17514125.html

相关文章

  • Docker容器 如何修改容器时间,时区问题修改
    1.以root身份进入容器dockerexec-it-urootb3465e6bbc5b/bin/sh可以使用date查看时间2.在容器中创建文件mkdir-p /usr/share/zoneinfo/Asia3.回到宿主机,复制宿主机里的文件到容器中docker cp /usr/share/zoneinfo/Asia/Shanghai容器ID或容器名:/usr/share/zonei......
  • 【C语言】时间结构体
    本文主要就C语言中常用类型time_t具体分析。一、定义首先来看一下定义,原来是一种类型重命名。/*File:/usr/include/time.h*/typedef__time_ttime_t;库文件中使用的其实是__time_t这个命名。/*File:/usr/include/bits/time.h*/structtimeval{__time_ttv_se......
  • JavaScript 链表的增删改查
       //节点对象classNode{constructor(data){this.data=data;//存储节点数据this.next=null;//存储下一个节点的引用,默认为null}}//链表对象classLinkedList{constructor(){this.head=null;//链表头节点,默认为null}......
  • js对时间的操作(秒数转化为时分秒)
    介绍:最近在写项目的时候遇到后台返回的时间是1300秒,考虑到页面展示效果不佳,想到直接改成时分秒的样式,代码如下://秒数转化为时分秒formatSeconds(value){varsecondTime=parseInt(value);//秒varminuteTime=0;//分varhourTime=0;//......
  • inotifywait 监控文件修改实时格式化文件
    我们在学习laravel过程中,从文档网页复制代码,会有一些比较麻烦的问题。以《Laravel10中文文档》|LaravelChina社区(learnku.com)为例 直接点复制按钮会带后,想测试的代码的话,还有处理use语句选中复制时,网站会向剪贴板追加来源信息,还得手动处理。 这些手动处理......
  • Mysql 日期和时间转换
    https://www.php.cn/faq/523569.html一、MySQL中的日期时间类型在MySQL中,日期时间类型包括DATE、TIME、DATETIME以及TIMESTAMP四种类型。其中,DATE类型表示日期,格式为'YYYY-MM-DD';TIME类型表示时间,格式为'HH:MM:SS';DATETIME类型表示日期和时间,格式为'YYYY-MM-DDHH:MM:SS';TIMESTA......
  • JavaScript学习 -- 内置函数(Math和Date)
    一、Date函数letdate=newDate()console.log("当前日期和时间:"+date)console.log("当前日期和时间:"+date.toLocaleString())console.log("年份:"+date.getFullYear())console.log("月份:"+(parseInt(date.getMonth())+1))console.log("日:"......
  • centos之格式化输出 printf
    ############################对齐:右对齐:printf"%s"左对齐:printf"%-s"宽度:printf"%-10s" ,左对齐,宽度为10printf “%-4.2f” ,左对齐,宽度为4,保留两位小数。 格式化说明符:%s:字符串%d:数字%f:浮点数字%o:一个八进制的数字%x:一个十六进制的数字......
  • JavaScript引爆Salesforce职业生涯!抓住高薪机会
    Salesforce是一款领先的CRM软件,已被各种规模和行业的企业使用多年。Salesforce不仅易于使用,而且可定制,使企业能够改善其销售、营销、客户服务和其他业务流程。近年来,Salesforce一直在创新,从传统的基于Oracle的平台转变为在业界更具吸引力的解决方案。目前,许多工作可以由人工智能......
  • AI智慧安监EasyCVR平台长时间运行出现协程高的现象是什么原因?
    EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。有用户反馈,EasyCVR平台向上级联后,运......