在前端业务开发中,经常会遇到需要将具体日期转换为半年度标识的需求,比如统计报表需要按半年度展示数据,此时就需要把传入的日期字符串处理成类似2023年上半年、2024年下半年的格式。下面介绍具体的实现方法。

核心实现思路
要实现日期字符串到半年度格式的转换,整体可以分为三个步骤:
- 解析输入的日期字符串,生成对应的
Date对象,确保日期合法 - 从
Date对象中提取年份和月份信息,根据月份判断所属半年度 - 按照需要的格式拼接年份和半年度标识,返回最终结果
基础实现代码
以下是一个通用的转换函数,支持传入常见的日期字符串,返回中文半年度格式:
/**
* 将日期字符串转换为半年度格式
* @param {string} dateStr 日期字符串,支持YYYY-MM-DD、YYYY/MM/DD等格式
* @returns {string} 半年度格式字符串,如2023年上半年
*/
function convertDateToHalfYear(dateStr) {
// 解析日期字符串生成Date对象
const date = new Date(dateStr);
// 校验日期是否合法
if (isNaN(date.getTime())) {
throw new Error('无效的日期字符串');
}
// 获取年份
const year = date.getFullYear();
// 获取月份,注意getMonth返回0-11,需要加1得到1-12月
const month = date.getMonth() + 1;
// 判断半年度,1-6月为上半年,7-12月为下半年
const halfYear = month <= 6 ? '上半年' : '下半年';
return `${year}年${halfYear}`;
}
代码解析
日期解析与校验
这里使用new Date(dateStr)解析日期字符串,JavaScript的Date构造函数可以自动识别大部分常见的日期格式。解析完成后通过isNaN(date.getTime())判断日期是否合法,避免传入无效字符串导致后续逻辑出错。
半年度判断逻辑
由于getMonth()返回的是0到11的数值,对应1到12月需要加1。半年度划分规则为1-6月属于上半年,7-12月属于下半年,因此通过month <= 6的条件即可完成判断。
扩展场景处理
如果需要返回其他格式的半年度标识,比如英文格式或者缩写格式,可以修改拼接逻辑。以下是返回英文缩写格式的示例:
/**
* 将日期字符串转换为英文缩写半年度格式
* @param {string} dateStr 日期字符串
* @returns {string} 如2023-H1、2024-H2
*/
function convertDateToHalfYearAbbr(dateStr) {
const date = new Date(dateStr);
if (isNaN(date.getTime())) {
throw new Error('无效的日期字符串');
}
const year = date.getFullYear();
const month = date.getMonth() + 1;
const halfYear = month <= 6 ? 'H1' : 'H2';
return `${year}-${halfYear}`;
}
注意事项
- 输入的日期字符串如果包含时区信息,
Date对象会按照本地时区解析,若需要统一时区处理,可以先对字符串做时区转换再解析 - 如果业务中的半年度划分规则不是自然半年度,比如按照财年划分,只需要修改月份判断的阈值即可,比如财年从4月开始,那么4-9月为H1,10-次年3月为H2
- 对于大量日期转换的场景,可以将年份和半年度判断逻辑抽成公共方法,减少重复代码
日期处理时需要注意边界情况,比如2月29日这种特殊日期,在解析非闰年的2月29日字符串时,Date会自动转换为3月1日,需要根据业务需求决定是否做特殊校验。
JavaScript日期字符串转换半年度格式Date对象修改时间:2026-07-21 06:42:21