JavaScript常用的日期时间函数封装及其详细说明

 更新时间:2025年10月28日 10:30:43   作者:~无忧花开~  
在Web开发中,日期格式化是常见需求,下面这篇文章主要介绍了JavaScript常用的日期时间函数封装及其详细说明的相关资料,文中通过代码介绍非常详细,需要的朋友可以参考下

JavaScript 日期时间函数封装

JavaScript 提供了丰富的日期时间处理函数,但直接使用原生 API 可能不够便捷。通过封装常用函数,可以提高代码复用性和可读性。以下是一些常用的日期时间函数封装及其详细说明。

获取当前时间戳

封装一个函数获取当前时间戳,可以是毫秒级或秒级。

function getTimestamp(unit = 'ms') {
  const timestamp = Date.now();
  return unit === 's' ? Math.floor(timestamp / 1000) : timestamp;
}
  • unit 参数用于指定返回的时间戳单位,默认为毫秒('ms'),传入 's' 则返回秒级时间戳。
  • Date.now() 返回当前时间的毫秒数,Math.floor 用于向下取整。

格式化日期

将日期对象格式化为指定的字符串形式,例如 YYYY-MM-DD HH:mm:ss

function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');

  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds);
}
  • date 参数是一个 Date 对象。
  • format 参数指定输出的格式,默认是 YYYY-MM-DD HH:mm:ss
  • padStart 方法用于补零,确保月份、日期等始终是两位数。

解析日期字符串

将日期字符串解析为 Date 对象,支持多种常见格式。

function parseDate(dateString) {
  if (!dateString) return new Date();
  if (dateString instanceof Date) return dateString;
  if (typeof dateString === 'number') return new Date(dateString);

  const patterns = [
    /^(\d{4})-(\d{2})-(\d{2})$/, // YYYY-MM-DD
    /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/, // YYYY-MM-DD HH:mm:ss
    /^(\d{4})\/(\d{2})\/(\d{2})$/, // YYYY/MM/DD
  ];

  for (const pattern of patterns) {
    const match = dateString.match(pattern);
    if (match) {
      const [, year, month, day, hours = 0, minutes = 0, seconds = 0] = match;
      return new Date(year, month - 1, day, hours, minutes, seconds);
    }
  }

  return new Date(dateString); // Fallback to native parsing
}
  • dateString 可以是 Date 对象、时间戳或字符串。
  • 函数尝试匹配常见的日期格式,如 YYYY-MM-DDYYYY-MM-DD HH:mm:ss
  • 如果无法匹配任何模式,则回退到原生 Date 解析。

计算日期差

计算两个日期之间的差值,返回天、小时、分钟或秒。

function dateDiff(startDate, endDate, unit = 'day') {
  const diffMs = endDate - startDate;
  const units = {
    day: 1000 * 60 * 60 * 24,
    hour: 1000 * 60 * 60,
    minute: 1000 * 60,
    second: 1000,
  };

  return Math.floor(diffMs / units[unit]);
}
  • startDateendDateDate 对象或时间戳。
  • unit 参数指定返回的单位,支持 dayhourminutesecond
  • 函数返回两个日期之间的整数差值。

日期加减

对日期进行加减操作,支持年、月、日等单位。

function dateAdd(date, amount, unit = 'day') {
  const result = new Date(date);
  const units = {
    year: 'FullYear',
    month: 'Month',
    day: 'Date',
    hour: 'Hours',
    minute: 'Minutes',
    second: 'Seconds',
  };

  if (units[unit]) {
    result[`set${units[unit]}`](result[`get${units[unit]}`]() + amount);
  }
  return result;
}
  • dateDate 对象或时间戳。
  • amount 是要加减的数量,可以是正数或负数。
  • unit 指定操作的单位,如 yearmonthday 等。
  • 函数返回一个新的 Date 对象,不会修改原始日期。

获取月份的天数

获取指定年份和月份的天数。

function getDaysInMonth(year, month) {
  return new Date(year, month + 1, 0).getDate();
}
  • yearmonth 是整数,月份从 0 开始(0 表示一月)。
  • 函数返回该月的天数,自动处理闰年。

判断是否为闰年

判断指定年份是否为闰年。

function isLeapYear(year) {
  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}
  • year 是整数。
  • 函数返回布尔值,true 表示是闰年。

获取季度

根据月份获取所在的季度。

function getQuarter(month) {
  return Math.floor(month / 3) + 1;
}
  • month 是整数,从 0 开始。
  • 函数返回 1 到 4 之间的整数,表示季度。

时间戳转日期

将时间戳转换为 Date 对象。

function timestampToDate(timestamp) {
  return new Date(timestamp);
}
  • timestamp 是毫秒级时间戳。
  • 函数返回对应的 Date 对象。

日期转时间戳

Date 对象或日期字符串转换为时间戳。

function dateToTimestamp(date, unit = 'ms') {
  const timestamp = date instanceof Date ? date.getTime() : new Date(date).getTime();
  return unit === 's' ? Math.floor(timestamp / 1000) : timestamp;
}
  • date 可以是 Date 对象、时间戳或日期字符串。
  • unit 指定返回的时间戳单位,默认为毫秒('ms'),传入 's' 则返回秒级。

判断日期是否相等

比较两个日期是否相等,支持精确到天、小时或分钟。

function isSameDate(date1, date2, unit = 'day') {
  const d1 = new Date(date1);
  const d2 = new Date(date2);
  const units = {
    year: 'FullYear',
    month: 'Month',
    day: 'Date',
    hour: 'Hours',
    minute: 'Minutes',
  };

  if (units[unit]) {
    return d1[`get${units[unit]}`]() === d2[`get${units[unit]}`]();
  }
  return d1.getTime() === d2.getTime();
}
  • date1date2Date 对象、时间戳或日期字符串。
  • unit 指定比较的精度,如 yearmonthday 等。
  • 函数返回布尔值,表示两个日期是否相等。

获取当前时间的零点

获取当前日期的零点时间(00:00:00)。

function getStartOfDay(date) {
  const d = new Date(date);
  d.setHours(0, 0, 0, 0);
  return d;
}
  • dateDate 对象、时间戳或日期字符串。
  • 函数返回一个新的 Date 对象,时间部分设置为零点。

获取当前时间的结束时间

获取当前日期的结束时间(23:59:59)。

function getEndOfDay(date) {
  const d = new Date(date);
  d.setHours(23, 59, 59, 999);
  return d;
}
  • dateDate 对象、时间戳或日期字符串。
  • 函数返回一个新的 Date 对象,时间部分设置为结束时间。

判断日期是否在范围内

判断一个日期是否在指定的日期范围内。

function isDateInRange(date, startDate, endDate) {
  const d = new Date(date);
  const start = new Date(startDate);
  const end = new Date(endDate);
  return d >= start && d <= end;
}
  • date 是待检查的日期。
  • startDateendDate 是范围的起始和结束日期。
  • 函数返回布尔值,表示日期是否在范围内。

获取星期几

获取指定日期是星期几,返回数字或名称。

function getDayOfWeek(date, format = 'number') {
  const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  const day = new Date(date).getDay();
  return format === 'name' ? days[day] : day;
}
  • dateDate 对象、时间戳或日期字符串。
  • format 指定返回格式,'number' 返回 0-6(0 是周日),'name' 返回英文名称。

获取时间段的月份列表

获取两个日期之间的所有月份。

function getMonthsBetweenDates(startDate, endDate) {
  const start = new Date(startDate);
  const end = new Date(endDate);
  const months = [];
  let current = new Date(start);

  while (current <= end) {
    months.push(new Date(current));
    current.setMonth(current.getMonth() + 1);
  }

  return months;
}
  • startDateendDateDate 对象、时间戳或日期字符串。
  • 函数返回一个数组,包含该时间段内的所有月份。

时区转换

将日期从一个时区转换到另一个时区。

function convertTimeZone(date, targetTimeZone) {
  const options = { timeZone: targetTimeZone };
  return new Date(date.toLocaleString('en-US', options));
}
  • dateDate 对象、时间戳或日期字符串。
  • targetTimeZone 是目标时区,如 'America/New_York'
  • 函数返回转换后的 Date 对象。

日期有效性检查

检查一个日期是否有效。

function isValidDate(date) {
  return date instanceof Date && !isNaN(date.getTime());
}
  • date 是待检查的日期。
  • 函数返回布尔值,表示日期是否有效。

总结

以上封装涵盖了 JavaScript 日期时间处理的常见需求,包括格式化、解析、计算、比较和时区转换等。通过合理封装,可以减少重复代码,提高开发效率。实际使用时,可以根据项目需求进一步调整或扩展这些函数。

相关文章

  • JS中Safari浏览器中的Date

    JS中Safari浏览器中的Date

    在js中处理Date时,发现Safari和其他浏览器的支持方式不一致。下面通过本文给大家分享js中Safari浏览器中的Date,感兴趣的朋友一起学习吧
    2017-07-07
  • JS完成画圆圈的小球

    JS完成画圆圈的小球

    本文主要介绍了JS完成画圆圈的小球的实例,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • 通过JavaScript实现CSS和JS文件的动态加载

    通过JavaScript实现CSS和JS文件的动态加载

    在现代Web开发中,动态加载CSS和JavaScript文件是一个常见的需求,这种技术可以用来优化页面加载速度,减少初始加载时间,并提高用户体验,本文将详细介绍如何通过JavaScript实现CSS和JS文件的动态加载,包括不同的加载方法、注意事项以及最佳实践
    2024-11-11
  • 封装html的select标签的js操作实例

    封装html的select标签的js操作实例

    本文将为大家介绍下正如标题所示的select操作:清空所有的选项、添加一个选项、根据值、选中一个选项、根据下标,选中一个选项,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07
  • 微信小程序实现select二级下拉

    微信小程序实现select二级下拉

    这篇文章主要为大家详细介绍了微信小程序实现select二级下拉效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Javascript实现获取及设置光标位置的方法

    Javascript实现获取及设置光标位置的方法

    这篇文章主要介绍了Javascript实现获取及设置光标位置的方法,涉及javascript针对页面光标位置的相关操作技巧,具有良好的兼容性,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • JS实现的简单拖拽功能示例

    JS实现的简单拖拽功能示例

    这篇文章主要介绍了JS实现的简单拖拽功能,涉及javascript鼠标事件响应及页面元素属性动态操作相关技巧,需要的朋友可以参考下
    2017-03-03
  • Javascript使用post方法提交数据实例

    Javascript使用post方法提交数据实例

    这篇文章主要介绍了Javascript使用post方法提交数据,实例分析了javascript实现post提交数据的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • javascript陷阱 一不小心你就中招了(字符运算)

    javascript陷阱 一不小心你就中招了(字符运算)

    看似简单的加法运行,却有很多问题,一定要注意字符与数字的运算,注意使用js的强制类型转换,否则会出现很多问题。我们在编写js的过程中,最好通过alert逐行测试
    2013-11-11
  • JS实现支持多选的遍历下拉列表代码

    JS实现支持多选的遍历下拉列表代码

    这篇文章主要介绍了JS实现支持多选的遍历下拉列表代码,涉及javascript遍历select及设置css属性的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08

最新评论