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. 核心逻辑分解
-
日期解析:将输入字符串转为本地时间的
Date对象 - 周计算:找到输入日期所在周的周一和周日
-
格式处理:将日期格式化为
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. 关键代码解析
-
日期解析
- 通过
split分割字符串并手动创建Date对象,避免时区转换问题2 - 示例:
new Date(2025, 3, 17)对应本地时间的2025年4月17日
- 通过
-
周计算逻辑
-
dayOfWeek === 0表示周日,需回退6天到上周一 - 其他情况直接减去
(dayOfWeek - 1)天即可到达周一
-
-
自动跨月处理
-
setDate()方法自动处理跨月/跨年逻辑 - 示例:输入
2025-05-01生成20250428-20250504
-
4.4 扩展应用场景
-
自定义周起始日
若要修改为周日到周六的区间:
const daysToSunday = dayOfWeek; // 直接回退到周日 startDate.setDate(baseDate.getDate() - daysToSunday); endDate.setDate(startDate.getDate() + 6); -
国际化周定义
使用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