前端开发【插件】moment 基本使用详解【日期】

ops/2025/1/8 20:37:55/

moment.js 是一个非常流行的 JavaScript 库,用于处理和操作日期与时间。它提供了丰富的 API 来处理各种日期、时间和格式化的操作。尽管随着 Date API 的增强,moment.js 被视为“过时”,并且推荐使用 date-fnsluxon 等库来替代,但仍然有很多现有的项目中使用 moment.js

1. 安装 moment.js

你可以通过 npm 或直接在 HTML 中引入来安装 moment.js

使用 npm 安装:
npm install moment
使用 CDN 引入:
<script src="https://cdn.jsdelivr.net/npm/moment@2.29.1/moment.min.js"></script>

2. 基本使用示例

javascript">const moment = require('moment');// 获取当前时间
console.log(moment().format()); // 输出 ISO 8601 格式:2025-01-06T13:45:30+08:00// 获取当前日期
console.log(moment().format('YYYY-MM-DD')); // 输出:2025-01-06// 获取当前时间(小时:分钟:秒)
console.log(moment().format('HH:mm:ss')); // 输出:13:45:30

3. 常见函数

1. moment() — 创建一个当前时间的 moment 对象
javascript">const now = moment();  // 获取当前时间
console.log(now);  // 输出:Moment { _d: 2025-01-06T13:45:30.000Z, ... }
2. format() — 格式化日期和时间
javascript">const now = moment();
console.log(now.format('YYYY-MM-DD')); // 格式:2025-01-06
console.log(now.format('MMMM Do YYYY, h:mm:ss a')); // 格式:January 6th 2025, 1:45:30 pm
console.log(now.format('dddd')); // 星期几:Monday
3. add() — 增加时间(如加天、月、年等)
javascript">const today = moment();
console.log(today.add(7, 'days').format('YYYY-MM-DD'));  // 增加 7 天
console.log(today.add(1, 'months').format('YYYY-MM-DD')); // 增加 1 个月
console.log(today.add(2, 'years').format('YYYY-MM-DD')); // 增加 2 年
4. subtract() — 减少时间
javascript">const today = moment();
console.log(today.subtract(1, 'weeks').format('YYYY-MM-DD')); // 减去 1 周
console.log(today.subtract(3, 'days').format('YYYY-MM-DD')); // 减去 3 天
5. isBefore() — 判断日期是否在指定日期之前
javascript">const date1 = moment('2025-01-01');
const date2 = moment('2025-01-06');console.log(date1.isBefore(date2)); // true
6. isAfter() — 判断日期是否在指定日期之后
javascript">console.log(date2.isAfter(date1)); // true
7. isSame() — 判断日期是否相同
javascript">const date1 = moment('2025-01-06');
const date2 = moment('2025-01-06');
console.log(date1.isSame(date2, 'day')); // true
8. diff() — 计算两个日期之间的差值
javascript">const date1 = moment('2025-01-01');
const date2 = moment('2025-01-06');// 计算差值
const daysDifference = date2.diff(date1, 'days');
console.log(daysDifference); // 5 天
9. startOf()endOf() — 获取某个单位(如开始或结束时间)
javascript">const today = moment();// 获取当月的第一天
console.log(today.startOf('month').format('YYYY-MM-DD')); // 2025-01-01// 获取当月的最后一天
console.log(today.endOf('month').format('YYYY-MM-DD')); // 2025-01-31
10. calendar() — 以日历的形式格式化日期
javascript">const now = moment();
console.log(now.calendar());  // Today at 1:45 PM
11. toDate() — 转换为原生 JavaScript Date 对象
javascript">const momentObj = moment();
const jsDate = momentObj.toDate();
console.log(jsDate);  // 2025-01-06T13:45:30.000Z

4. 在实际项目中的应用:日期处理

假设你正在开发一个项目,其中需要显示用户的注册时间、计算两次活动之间的时间差,并展示时间的相对表达形式(如“3小时前”、“昨天”)。

示例项目代码
javascript">const moment = require('moment');// 用户注册时间
const registrationTime = moment('2024-12-01T08:30:00');// 显示用户注册的时间
console.log("用户注册时间:" + registrationTime.format('YYYY-MM-DD HH:mm:ss')); // 2024-12-01 08:30:00// 计算当前时间与注册时间之间的差值
const now = moment();
const daysSinceRegistration = now.diff(registrationTime, 'days');
console.log(`用户注册已有 ${daysSinceRegistration}`);// 显示时间的相对表示(例如:3小时前、昨天等)
console.log("注册时间的相对表示:" + registrationTime.from(now)); // 3 weeks ago// 如果用户登录时间在当天,显示“今天”
const loginTime = moment();
if (loginTime.isSame(now, 'day')) {console.log("用户今天登录");
} else {console.log("用户不是今天登录");
}

5. 时间格式化的常用格式

  • YYYY — 四位年份(例如 2025)
  • MM — 两位月份(例如 01、12)
  • DD — 两位日期(例如 01、31)
  • HH — 两位小时(24小时制,00-23)
  • mm — 两位分钟(00-59)
  • ss — 两位秒钟(00-59)
  • a — 小写的“am”或“pm”
  • MMMM — 完整月份名(例如 January、February)

6. 其他有用的功能

  • 设置语言:

    javascript">moment.locale('zh-cn');  // 设置为中文
    
  • 获取 Unix 时间戳:

    javascript">const timestamp = moment().unix();  // 获取当前 Unix 时间戳
    console.log(timestamp);
    
  • 从 Unix 时间戳创建日期:

    javascript">const dateFromTimestamp = moment.unix(1609459200);  // 使用 Unix 时间戳创建日期
    console.log(dateFromTimestamp.format('YYYY-MM-DD'));  // 输出:2021-01-01
    

总结

moment.js 提供了许多功能强大的日期处理和格式化工具,它能帮助你在前端开发中轻松处理时间和日期。尽管它的更新已停止,但在很多项目中仍然被广泛使用。对于新项目,建议考虑使用 date-fnsluxon 等更现代的库。但如果你正在处理现有的项目并需要日期处理,moment.js 依然是一个很好的选择。


http://www.ppmy.cn/ops/148265.html

相关文章

嵌入式驱动开发详解8(阻塞/非阻塞/异步通信)

文章目录 前言阻塞非阻塞异步通知后续 前言 首先来回顾一下“中断”&#xff0c;中断是处理器提供的一种异步机制&#xff0c;我们配置好中断以后就 可以让处理器去处理其他的事情了&#xff0c;当中断发生以后会触发我们事先设置好的中断服务函数&#xff0c; 在中断服务函数…

leetcode 面试经典 150 题:轮转数组

链接轮转数组题序号189题型数组解法1. 额外数组法&#xff0c;2. 原数组翻转法&#xff08;三次翻转法&#xff09;难度中等熟练度✅✅✅✅ 题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,…

下载Stegsolve.jar后运行报错 ”Error: Unable to access jarfile stegslove. ”

文章目录 解决方案&#xff08;可解决jar类文件打不开的情况&#xff09;本人特殊情况 解决方案&#xff08;可解决jar类文件打不开的情况&#xff09; 搜索了很多资料&#xff0c;找到解决方案&#xff0c;”winr” 运行cmd&#xff0c;输入“regedit”&#xff0c;打开注册表…

计算机网络 (19)扩展的以太网

前言 以太网&#xff08;Ethernet&#xff09;是一种局域网&#xff08;LAN&#xff09;技术&#xff0c;它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网技术不断演进&#xff0c;从最初的10Mbps到如今的10Gbps、25Gbps、40Gbps、100Gbps等&#xff0c;已成…

什么是 JDK 动态代理和 CGLIB 动态代理,他们分别有什么区别

JDK动态代理和CGLIB动态代理是Java中实现动态代理的两种常见方式&#xff0c;它们的区别、使用方法及案例如下&#xff1a; 区别 原理不同 JDK动态代理&#xff1a;基于Java反射机制实现&#xff0c;必须有接口&#xff0c;通过在运行时创建一个实现了目标接口的代理类来拦截…

大模型搜索引擎增强问答demo-纯python实现

流程概览 本文使用python语言,实现了大模型搜索引擎增强问答demo。 大模型搜索引擎增强问答定义:根据问题搜索得到相关内容,拼接prompt=问题+搜索结果,将这个prompt传入大模型,得到最终的结果。 优势在于搜索引擎可以返回实时性信息,例如明日双色球开奖信息、最新八卦…

certificate verify failed: unable to get local issuer certificate (_ssl.c:10

出现 “certificate verify failed: unable to get local issuer certificate (_ssl.c:10)” 这个错误通常是因为Python在尝试建立HTTPS连接时&#xff0c;无法验证服务器的SSL证书。这可能是因为本地系统中缺少必要的根证书&#xff0c;或者服务器的证书链不完整&#xff0c;导…

MongoDB基础

第1章&#xff1a;MongoDB基础 1.1 NoSQL与MongoDB简介 1.1.1 NoSQL数据库发展历程 传统关系型数据库的局限性Web 2.0时代的数据存储需求NoSQL数据库的兴起MySQL与MongoDB的比较 优点&#xff1a; 高性能可扩展灵活的文档模型 缺点&#xff1a; 无事务支持无join支持数据一致…