跳转至

获取本月最后一天

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4mqg1ptck

脚本说明

该脚本用于获取当前月份的最后一天。在MyApps平台中,可以通过Date对象计算获取本月的最后一天日期。

常见实现方式

方式1:使用Date对象获取本月最后一天

(function(){
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 1;

    // 获取下个月的第一天,然后减1天,得到本月的最后一天
    var lastDay = new Date(year, month, 0);

    return format(lastDay, "yyyy-MM-dd");
})();

方式2:获取本月最后一天的日期数

(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();  // 返回日期数,如:31
})();

方式3:获取指定月份的最后一天

(function(){
    var year = 2024;
    var month = 2;  // 2月

    // 获取下个月的第一天,然后减1天
    var lastDay = new Date(year, month, 0);

    return format(lastDay, "yyyy-MM-dd");
})();

方式4:使用Java Calendar获取本月最后一天

(function(){
    var Calendar = Packages.java.util.Calendar;
    var SimpleDateFormat = Packages.java.text.SimpleDateFormat;

    var calendar = Calendar.getInstance();
    calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));

    var sdf = new SimpleDateFormat("yyyy-MM-dd");
    var result = sdf.format(calendar.getTime());

    return result;
})();

扩展示例

示例1:获取本月最后一天并格式化

(function(){
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 1;

    var lastDay = new Date(year, month, 0);

    var formatted = format(lastDay, "yyyy-MM-dd");
    var dayNumber = lastDay.getDate();

    return "本月最后一天: " + formatted + " (第" + dayNumber + "天)";
})();

示例2:获取本月第一天和最后一天

(function(){
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth();

    var firstDay = new Date(year, month, 1);
    var lastDay = new Date(year, month + 1, 0);

    var range = {
        firstDay: format(firstDay, "yyyy-MM-dd"),
        lastDay: format(lastDay, "yyyy-MM-dd")
    };

    return JSON.stringify(range);
})();

示例3:判断今天是否是本月最后一天

(function(){
    var today = new Date();
    var year = today.getFullYear();
    var month = today.getMonth() + 1;

    var lastDay = new Date(year, month, 0);
    var todayDate = today.getDate();
    var lastDayDate = lastDay.getDate();

    if(todayDate == lastDayDate){
        return true;
    }else{
        return false;
    }
})();

示例4:获取本月剩余天数

(function(){
    var today = new Date();
    var year = today.getFullYear();
    var month = today.getMonth() + 1;

    var lastDay = new Date(year, month, 0);
    var todayDate = today.getDate();
    var lastDayDate = lastDay.getDate();

    var remainingDays = lastDayDate - todayDate;

    return remainingDays;
})();

示例5:获取上个月最后一天

(function(){
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth();  // 当前月份(0-11)

    // 获取当前月的第一天,然后减1天,得到上个月的最后一天
    var lastDay = new Date(year, month, 0);

    return format(lastDay, "yyyy-MM-dd");
})();

示例6:获取下个月最后一天

(function(){
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 2;  // 下个月

    // 获取下下个月的第一天,然后减1天,得到下个月的最后一天
    var lastDay = new Date(year, month, 0);

    return format(lastDay, "yyyy-MM-dd");
})();

示例7:获取本季度最后一天

(function(){
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var quarter = Math.floor((month - 1) / 3);

    // 季度最后一个月
    var quarterEndMonth = (quarter + 1) * 3;

    var lastDay = new Date(year, quarterEndMonth, 0);

    return format(lastDay, "yyyy-MM-dd");
})();

示例8:获取本年度最后一天

(function(){
    var date = new Date();
    var year = date.getFullYear();

    // 获取下一年的第一天,然后减1天,得到本年的最后一天
    var lastDay = new Date(year + 1, 0, 0);

    return format(lastDay, "yyyy-MM-dd");
})();

示例9:获取本月所有日期

(function(){
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth();

    var firstDay = new Date(year, month, 1);
    var lastDay = new Date(year, month + 1, 0);
    var lastDayDate = lastDay.getDate();

    var dates = [];
    for(var i = 1; i <= lastDayDate; i++){
        var currentDate = new Date(year, month, i);
        dates.push(format(currentDate, "yyyy-MM-dd"));
    }

    return JSON.stringify(dates);
})();

示例10:验证日期是否是本月最后一天

(function(){
    var checkDate = new Date("2024-01-31");
    var year = checkDate.getFullYear();
    var month = checkDate.getMonth() + 1;

    var lastDay = new Date(year, month, 0);
    var checkDateNum = checkDate.getDate();
    var lastDayNum = lastDay.getDate();

    if(checkDateNum == lastDayNum){
        return "是本月最后一天";
    }else{
        return "不是本月最后一天,本月最后一天是: " + format(lastDay, "yyyy-MM-dd");
    }
})();

示例11:获取本月工作日最后一天

(function(){
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 1;

    var lastDay = new Date(year, month, 0);
    var lastDayDate = lastDay.getDate();
    var lastDayObj = new Date(year, month - 1, lastDayDate);

    // 如果最后一天是周末,向前找到最后一个工作日
    while(lastDayObj.getDay() == 0 || lastDayObj.getDay() == 6){
        lastDayObj.setDate(lastDayObj.getDate() - 1);
    }

    return format(lastDayObj, "yyyy-MM-dd");
})();

示例12:错误处理和日志记录

(function(){
    try{
        var date = new Date();
        var year = date.getFullYear();
        var month = date.getMonth() + 1;

        var lastDay = new Date(year, month, 0);
        var result = format(lastDay, "yyyy-MM-dd");

        println("当前月份: " + year + "-" + month);
        println("本月最后一天: " + result);

        return result;
    }catch(e){
        println("错误: " + e.getMessage());
        return "获取失败";
    }
})();

关键函数说明

  • new Date(year, month, day): 创建日期对象
  • year: 年份
  • month: 月份(0-11,0表示1月)
  • day: 日期(0表示上个月的最后一天)
  • date.getFullYear(): 获取年份
  • date.getMonth(): 获取月份(0-11)
  • date.getDate(): 获取日期(1-31)
  • format(date, "格式"): 格式化日期
  • Packages.java.util.Calendar: Java日历类
  • calendar.getActualMaximum(Calendar.DAY_OF_MONTH): 获取月份的最大天数

获取最后一天的原理

JavaScript方法

// 原理:创建下个月的第一天(day=0),即本月的最后一天
var lastDay = new Date(year, month, 0);

说明

  • new Date(year, month, 0) 中的 0 表示上个月的最后一天
  • 如果 month 是当前月+1,则 day=0 就是当前月的最后一天
  • 例如:new Date(2024, 2, 0) 返回 2024年1月的最后一天(2024-01-31)

注意事项

  • ⚠️ 月份索引: JavaScript中月份从0开始(0-11),注意加1
  • ⚠️ 闰年处理: 2月份的天数会自动处理闰年(28或29天)
  • ⚠️ 日期有效性: 使用 new Date(year, month, 0) 方法会自动处理月份边界
  • ⚠️ 时区问题: 注意时区差异,可能影响日期计算
  • ⚠️ 格式化: 使用format函数格式化日期输出
  • 使用 new Date(year, month, 0) 是最简单的方法
  • 该方法会自动处理不同月份的天数差异
  • 闰年的2月也会自动处理

使用场景

  • 日期范围查询(本月第一天到最后一天)
  • 报表统计(按月统计)
  • 到期时间计算
  • 日期验证
  • 工作日计算

如需查看完整脚本代码,请访问源文档链接。