时间计算¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a43lh6snlt
脚本说明¶
该脚本用于进行时间计算,包括日期加减、日期差计算、日期格式化等操作。在MyApps平台中,可以使用JavaScript的Date对象或Java的日期类进行时间计算。
常见实现方式¶
方式1:日期加减(加天数)¶
(function(){
var date = new Date();
var days = 7; // 加7天
date.setDate(date.getDate() + days);
return format(date, "yyyy-MM-dd");
})();
方式2:日期加减(减天数)¶
(function(){
var date = new Date();
var days = 7; // 减7天
date.setDate(date.getDate() - days);
return format(date, "yyyy-MM-dd");
})();
方式3:日期加减(加月份)¶
(function(){
var date = new Date();
var months = 1; // 加1个月
date.setMonth(date.getMonth() + months);
return format(date, "yyyy-MM-dd");
})();
方式4:日期加减(加年份)¶
(function(){
var date = new Date();
var years = 1; // 加1年
date.setFullYear(date.getFullYear() + years);
return format(date, "yyyy-MM-dd");
})();
方式5:计算两个日期的天数差¶
(function(){
var date1 = new Date("2024-01-01");
var date2 = new Date("2024-12-31");
var diffTime = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return diffDays; // 返回天数差
})();
扩展示例¶
示例1:计算工作日(排除周末)¶
(function(){
var startDate = new Date("2024-01-01");
var endDate = new Date("2024-01-31");
var workDays = 0;
var currentDate = new Date(startDate);
while(currentDate <= endDate){
var dayOfWeek = currentDate.getDay();
// 0是周日,6是周六
if(dayOfWeek != 0 && dayOfWeek != 6){
workDays++;
}
currentDate.setDate(currentDate.getDate() + 1);
}
return workDays;
})();
示例2:计算时间差(小时、分钟、秒)¶
(function(){
var date1 = new Date("2024-01-01 10:00:00");
var date2 = new Date("2024-01-01 15:30:45");
var diffTime = date2.getTime() - date1.getTime();
var hours = Math.floor(diffTime / (1000 * 60 * 60));
var minutes = Math.floor((diffTime % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((diffTime % (1000 * 60)) / 1000);
return hours + "小时" + minutes + "分钟" + seconds + "秒";
})();
示例3:计算年龄¶
(function(){
var birthDate = new Date("1990-01-01");
var today = new Date();
var age = today.getFullYear() - birthDate.getFullYear();
var monthDiff = today.getMonth() - birthDate.getMonth();
if(monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())){
age--;
}
return age;
})();
示例4:计算本月天数¶
(function(){
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
// 获取下个月的第一天,然后减1天,得到本月的最后一天
var lastDay = new Date(year, month, 0);
return lastDay.getDate();
})();
示例5:计算季度¶
(function(){
var date = new Date();
var month = date.getMonth() + 1;
var quarter = Math.ceil(month / 3);
return "第" + quarter + "季度";
})();
示例6:计算周数¶
(function(){
var date = new Date();
var startDate = new Date(date.getFullYear(), 0, 1);
var days = Math.floor((date - startDate) / (24 * 60 * 60 * 1000));
var weekNumber = Math.ceil((days + startDate.getDay() + 1) / 7);
return weekNumber;
})();
示例7:计算日期范围(本周)¶
(function(){
var today = new Date();
var dayOfWeek = today.getDay();
var diff = today.getDate() - dayOfWeek + (dayOfWeek == 0 ? -6 : 1); // 调整到周一
var monday = new Date(today.setDate(diff));
var sunday = new Date(today.setDate(diff + 6));
var range = {
start: format(monday, "yyyy-MM-dd"),
end: format(sunday, "yyyy-MM-dd")
};
return JSON.stringify(range);
})();
示例8:计算日期范围(本月)¶
(function(){
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();
var firstDay = new Date(year, month, 1);
var lastDay = new Date(year, month + 1, 0);
var range = {
start: format(firstDay, "yyyy-MM-dd"),
end: format(lastDay, "yyyy-MM-dd")
};
return JSON.stringify(range);
})();
示例9:计算日期范围(本季度)¶
(function(){
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();
var quarter = Math.floor(month / 3);
var quarterStartMonth = quarter * 3;
var quarterEndMonth = quarterStartMonth + 2;
var firstDay = new Date(year, quarterStartMonth, 1);
var lastDay = new Date(year, quarterEndMonth + 1, 0);
var range = {
start: format(firstDay, "yyyy-MM-dd"),
end: format(lastDay, "yyyy-MM-dd")
};
return JSON.stringify(range);
})();
示例10:计算相对时间(如:3天前、2小时后)¶
(function(){
var date = new Date();
var days = 3; // 3天前
date.setDate(date.getDate() - days);
return format(date, "yyyy-MM-dd HH:mm:ss");
})();
示例11:使用Java Calendar进行时间计算¶
(function(){
var Calendar = Packages.java.util.Calendar;
var SimpleDateFormat = Packages.java.text.SimpleDateFormat;
var calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, 7); // 加7天
var sdf = new SimpleDateFormat("yyyy-MM-dd");
var result = sdf.format(calendar.getTime());
return result;
})();
示例12:计算两个日期之间的所有日期¶
(function(){
var startDate = new Date("2024-01-01");
var endDate = new Date("2024-01-05");
var dates = [];
var currentDate = new Date(startDate);
while(currentDate <= endDate){
dates.push(format(currentDate, "yyyy-MM-dd"));
currentDate.setDate(currentDate.getDate() + 1);
}
return JSON.stringify(dates);
})();
关键函数说明¶
JavaScript Date对象¶
new Date(): 创建当前日期时间对象date.getTime(): 获取时间戳(毫秒)date.getFullYear(): 获取年份date.getMonth(): 获取月份(0-11)date.getDate(): 获取日期(1-31)date.getDay(): 获取星期(0-6,0是周日)date.setDate(date): 设置日期date.setMonth(month): 设置月份date.setFullYear(year): 设置年份format(date, "格式"): 格式化日期
Java日期类¶
Packages.java.util.Calendar: Java日历类Calendar.getInstance(): 获取Calendar实例calendar.add(field, amount): 日期加减calendar.getTime(): 获取Date对象Packages.java.text.SimpleDateFormat: 日期格式化类
时间计算说明¶
日期加减¶
- 加天数:
date.setDate(date.getDate() + days) - 加月份:
date.setMonth(date.getMonth() + months) - 加年份:
date.setFullYear(date.getFullYear() + years) - 加小时:
date.setHours(date.getHours() + hours) - 加分钟:
date.setMinutes(date.getMinutes() + minutes)
日期差计算¶
- 天数差:
(date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24) - 小时差:
(date2.getTime() - date1.getTime()) / (1000 * 60 * 60) - 分钟差:
(date2.getTime() - date1.getTime()) / (1000 * 60)
日期格式化¶
yyyy-MM-dd: 年-月-日yyyy-MM-dd HH:mm:ss: 年-月-日 时:分:秒yyyy年MM月dd日: 中文格式
注意事项¶
- ⚠️ 月份索引: JavaScript中月份从0开始(0-11),注意加1
- ⚠️ 星期索引: JavaScript中星期从0开始(0是周日)
- ⚠️ 时区问题: 注意时区差异,可能影响计算结果
- ⚠️ 闰年处理: 2月份的天数需要考虑闰年
- ⚠️ 日期有效性: 确保日期格式正确,避免无效日期
- ⚠️ 性能考虑: 大量日期计算时注意性能优化
- 日期加减时注意月份和年份的边界情况
- 计算日期差时注意正负值
- 建议使用format函数格式化日期输出
使用场景¶
- 日期范围查询
- 到期时间计算
- 工作日计算
- 年龄计算
- 时间差统计
- 报表日期范围
如需查看完整脚本代码,请访问源文档链接。