鸿蒙开发中格式化输出日期方法

/**
 * 将 Date 或时间戳 转化为指定格式的String
 *
 * 年(y)可以用 1-4 个占位符
 *
 * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符
 *
 * 周(E)可以用 1-3 个占位符
 *
 * 毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 *
 * eg:
 *
 * dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss.S") ==> 2024-07-29 08:09:04.423
 *
 * dateFormat(new Date(), "yyyy-MM-dd E HH:mm:ss") ==> 2024-07-29 四 20:09:04
 *
 * dateFormat(new Date(), "yyyy-MM-dd EE hh:mm:ss") ==> 2024-07-29 周四 08:09:04
 *
 * dateFormat(new Date(), "yyyy-MM-dd EEE hh:mm:ss") ==> 2024-08-29 星期四 08:09:04
 *
 * dateFormat(new Date(), "yyyy-M-d h:m:s.S") ==> 2024-8-29 8:9:4.18
 */
export function dateFormat(date?: number | Date, fmt?: string) {
  let _date = new Date();
  if (date == undefined || date == null) {
    _date = new Date();
  } else if (typeof (date) === 'number') {
    _date = new Date(date);
  }
  if (fmt == undefined || fmt == null || fmt.length <= 0) {
    fmt = "yyyy-MM-dd HH:mm:ss.S";
  }
  let map = new Map<String, Number>();
  map.set("M+", _date.getMonth() + 1); // 月份
  map.set("d+", _date.getDate()); // 日
  map.set("h+", _date.getHours() % 12 == 0 ? 12 : _date.getHours() % 12); // 12小时
  map.set("H+", _date.getHours()); // 24小时
  map.set("m+", _date.getMinutes()); // 分
  map.set("s+", _date.getSeconds()); // 秒
  map.set("q+", Math.floor((_date.getMonth() + 3) / 3)); // 季度
  map.set("S", _date.getMilliseconds()); // 毫秒

  let week = new Map<string, string>();
  week.set("0", "日");
  week.set("1", "一");
  week.set("2", "二");
  week.set("3", "三");
  week.set("4", "四");
  week.set("5", "五");
  week.set("6", "六");
  let yearMatcher = /(y+)/.exec(fmt);
  if (yearMatcher && yearMatcher.length > 0) {
    let match = yearMatcher[0];
    fmt = fmt.replace(match, (_date.getFullYear() + "").substr(4 - match.length));
  }
  let weekMatcher = /(E+)/.exec(fmt);
  if (weekMatcher && weekMatcher.length > 0) {
    let match = weekMatcher[0];
    fmt = fmt.replace(match,
      ((match.length > 1) ? (match.length > 2 ? "星期" : "周") : "") + week.get(_date.getDay() + ""));
  }
  map.forEach((value, key) => {
    let matcher = new RegExp(`(${key})`).exec(fmt!);
    if (matcher && matcher.length > 0) {
      let match = matcher[0];
      let replaceValue = '';
      if ((match.length == 1)) {
        replaceValue = `${value}`;
      } else {
        replaceValue = (("00" + value).substr(("" + value).length))
      }
      fmt = fmt!.replace(match, replaceValue);
    }
  });
  return fmt;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>