使用JavaScript实现三种时间格式及获取周区间、季区间

1. 获取当前时间(格式:YYYY-MM-DD)

实现思路

  • 使用Date对象获取当前时间
  • 提取年、月、日并补零(月份需+1
  • 拼接为YYYY-MM-DD格式
function getFormattedDate() {
  const date = new Date();
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, '0'); // 月份补零
  const day = date.getDate().toString().padStart(2, '0'); // 日期补零
  return `${year}-${month}-${day}`;
}

getFormattedDate()// 示例输出:'2025-03-31'

2. 将YYYY-MM-DD转换为YYYYMMDD

实现思路

  • 直接移除日期字符串中的分隔符-
// 方法一:基于现有格式转换
function getFormattedDate() {
  const date = new Date();
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, '0'); // 月份补零
  const day = date.getDate().toString().padStart(2, '0'); // 日期补零
  return `${year}-${month}-${day}`;
}

const dateStr = getFormattedDate(); // 假设已获取YYYY-MM-DD
const yyyymmdd = dateStr.replace(/-/g, ''); // 替换所有"-"
console.log('时间获取:',yyyymmdd)//打印输出时间获取: 20250331

// 方法二:独立生成
function get***pactDate() {
  const date = new Date();
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, '0');
  const day = date.getDate().toString().padStart(2, '0');
  return `${year}${month}${day}`;
}
get***pactDate()// 示例输出:'20250331'

3. 获取当前时间(格式:YYYY-MM-DD hh:mm:ss)

实现思路

  • 在日期基础上,补充时、分、秒并补零
function getFullDateTime() {
  const date = new Date();
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, '0');
  const day = date.getDate().toString().padStart(2, '0');
  const hours = date.getHours().toString().padStart(2, '0'); // 24小时制
  const minutes = date.getMinutes().toString().padStart(2, '0');
  const seconds = date.getSeconds().toString().padStart(2, '0');
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

getFullDateTime()// 示例输出:'2025-03-31 15:27:10'
代码说明
  • 补零处理:使用padStart(2, '0')确保单数字符串变为两位数(如 3 03)。
  • 月份修正date.getMonth()返回0-11,需+1得到实际月份。
  • 时间精度hh:mm:ss默认使用24小时制,符合常见需求。

3. 获取当前时间的前一周(格式:YYYYMMDD-YYYYMMDD) 

function getLastWeekRange(dateString) {
        // 解析输入日期为本地时间对象
        const [year, month, day] = dateString.split('-').map(Number)
        const endDate = new Date(year, month - 1, day)
        const startDate = new Date(endDate)
        startDate.setDate(endDate.getDate() - 6) // 计算7天范围(包含当天)

        // 日期格式化为YYYYMMDD
        const format = (date) => [
            date.getFullYear(),
            (date.getMonth() + 1).toString().padStart(2, '0'),
            date.getDate().toString().padStart(2, '0')
        ].join('')

        return `${format(startDate)}-${format(endDate)}`
    }
console.log(getLastWeekRange('2025-04-14'))//20250408-20250414

4. 获取当前时间所在的这周区间(格式:YYYYMMDD-YYYYMMDD)

4.1. 核心逻辑分解
  1. 日期解析:将输入字符串转为本地时间的Date对象
  2. 周计算:找到输入日期所在周的周一和周日
  3. 格式处理:将日期格式化为YYYYMMDD字符串
     
4.2. 完整代码实现
function getWeekRange(inputDate) {
  // 1. 解析输入日期(避免时区问题)
  const [year, month, day] = inputDate.split('-');
  const baseDate = new Date(year, month - 1, day); // 月份从0开始
  
  // 2. 计算周一的日期
  const dayOfWeek = baseDate.getDay(); // 0=周日, 1=周一...6=周六
  const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // 调整到最近的周一
  const startDate = new Date(baseDate);
  startDate.setDate(baseDate.getDate() - daysToMonday);
  
  // 3. 计算周日(周一+6天)
  const endDate = new Date(startDate);
  endDate.setDate(startDate.getDate() + 6);
  
  // 4. 格式化日期
  const formatDate = (date) => {
    const y = date.getFullYear();
    const m = String(date.getMonth() + 1).padStart(2, '0');
    const d = String(date.getDate()).padStart(2, '0');
    return `${y}${m}${d}`;
  };
  
  return `${formatDate(startDate)}-${formatDate(endDate)}`;
}

// 示例测试
console.log(getWeekRange('2025-04-17')); // 输出: 20250414-20250420
console.log(getWeekRange('2025-04-15')); // 输出: 20250414-20250420
console.log(getWeekRange('2025-05-01')); // 输出: 20250428-20250504(跨月测试)
4.3. 关键代码解析
  1. 日期解析

    • 通过split分割字符串并手动创建Date对象,避免时区转换问题2
    • 示例:new Date(2025, 3, 17)对应本地时间的2025年4月17日
  2. 周计算逻辑

    • dayOfWeek === 0表示周日,需回退6天到上周一
    • 其他情况直接减去(dayOfWeek - 1)天即可到达周一
  3. 自动跨月处理

    • setDate()方法自动处理跨月/跨年逻辑
    • 示例:输入 2025-05-01生成 20250428-20250504

4.4 扩展应用场景
  1. 自定义周起始日
    若要修改为周日到周六的区间:
     

    const daysToSunday = dayOfWeek; // 直接回退到周日
    startDate.setDate(baseDate.getDate() - daysToSunday);
    endDate.setDate(startDate.getDate() + 6);

  2. 国际化周定义
    使用toLocaleString获取地区特定的周起始日:
     

    const isMondayFirst = new Date('2023-01-02') // 测试周起始日
      .toLocaleString('en-US', { weekday: 'long' }) === 'Monday';

5、实现日期格式转换为季度格式的代码


      以下是基于JavaScript实现的一个函数,用于将日期格式(如 2025-01)转换为对应的季度格式(例如 202501-202503表示第一季度)。此功能可以通过解析输入字符串并计算其所属季度来完成

/**
 * 将日期格式(如 YYYY-MM)转换为季度格式(如 YYYYMM-YYYYMM)
 * @param {string} dateStr - 输入的日期字符串,格式为 "YYYY-MM"
 * @returns {string} - 季度范围字符串,格式为 "YYYYMM-YYYYMM"
 */
function convertDateToQuarter(dateStr) {
    // 验证输入格式是否正确
    const regex = /^(\d{4})-(\d{2})$/;
    const match = dateStr.match(regex);
    if (!match) {
        throw new Error('Invalid date format');
    }

    const year = parseInt(match[1], 10); // 提取年份
    const month = parseInt(match[2], 10); // 提取月份

    // 判断属于哪个季度
    let quarterStartMonth, quarterEndMonth;
    if (month >= 1 && month <= 3) {
        quarterStartMonth = 1;
        quarterEndMonth = 3;
    } else if (month >= 4 && month <= 6) {
        quarterStartMonth = 4;
        quarterEndMonth = 6;
    } else if (month >= 7 && month <= 9) {
        quarterStartMonth = 7;
        quarterEndMonth = 9;
    } else if (month >= 10 && month <= 12) {
        quarterStartMonth = 10;
        quarterEndMonth = 12;
    } else {
        throw new Error('Invalid month value');
    }

    // 构造季度范围字符串
    const start = `${year}${quarterStartMonth.toString().padStart(2, '0')}`;
    const end = `${year}${quarterEndMonth.toString().padStart(2, '0')}`;

    return `${start}-${end}`;
}

// 测试案例
console.log(convertDateToQuarter("2025-01")); // 输出: 202501-202503
console.log(convertDateToQuarter("2025-04")); // 输出: 202504-202506
console.log(convertDateToQuarter("2025-07")); // 输出: 202507-202509
console.log(convertDateToQuarter("2025-10")); // 输出: 202510-202512

持续补充中...

转载请说明出处内容投诉
CSS教程网 » 使用JavaScript实现三种时间格式及获取周区间、季区间

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买