我怎样才能找到一个月内的第一次和最后一次约会


How can I find the first and last date in a month

如何查找前2年中一个月的第一个和最后一个日期。例如,今天是2012年1月7日(年月日);我想查找2011年的数据。。。2011年1月1日2011年1月31日2011年2月1日2011年2月28日。差不多吧谢谢

您可以使用php日期函数来完成此操作。

$first = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year));
$last = date('Y-m-t', mktime(0, 0, 0, $month, 1, $year));
$Startyear=2010;
$Endyear=2012;
$monthstart=array();
$monthend=array();
for($i=$Startyear;$i<=$Endyear;$i++){
for($j=1;$j<=12;$j++){
$monthstart[$i][$j]=date('Y-m-d', mktime(0, 0, 0, $j, 1, $i));
$monthend[$i][$j]=date('Y-m-t', mktime(0, 0, 0, $j, 1, $i));
}
}
 select LAST_DAY('2011-01-01') from dual;

PHP的函数date('t')可以返回一个月中的天数:

echo date('t', mktime(1, 1, 1, 2, 1, 1970));
// outputs 28

其次,每月的第一天将始终是1

试试这个

DECLARE @mydate DATETIME
SELECT @mydate = GETDATE()
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)),@mydate),101) ,
'Last Day of Previous Month'
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)-1),@mydate),101) AS Date_Value,
'First Day of Current Month' AS Date_Type
UNION
SELECT CONVERT(VARCHAR(25),@mydate,101) AS Date_Value, 'Today' AS Date_Type
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,1,@mydate)),101) ,
'Last Day of Current Month'
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))-1),DATEADD(mm,1,@mydate)),101) ,
'First Day of Next Month'

我的算法是查找一个月中的天数。基于此,我可以找到第一天和最后一天。要计算一个月的天数,我们可以使用拳头法则。仅在2月份,我们必须检查闰年

每月31天(月序列号>7)?(月序号+1)%2:(月序号)%2。如果上述公式的结果为真,则为每月31天,否则为每月30天。仅在第2个月(2月),我们必须考虑闰年计算。

以下是您指定的问题的java实现

    List<Date> months = new ArrayList<Date>();
    Calendar currentDate = GregorianCalendar.getInstance();
    Calendar today = GregorianCalendar.getInstance();
    int currentYear = currentDate.get(Calendar.YEAR) - 2;
    int noOfMonths = 11 - today.get(Calendar.MONTH);
    SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
    currentDate.set(Calendar.DATE, 1);
    currentDate.set(Calendar.YEAR, currentYear);
    while (currentYear <= today.get(Calendar.YEAR)) {
        for (int monthCount = 0; monthCount <= noOfMonths; monthCount++) {
            currentDate.set(Calendar.DATE, 1);
            // adding start date
            months.add(currentDate.getTime());
            // processing end date
            currentDate.set(Calendar.DATE,
                    currentDate.getActualMaximum(Calendar.DATE));
            // adding end date
            months.add(currentDate.getTime());
            // goes to next month
            currentDate.set(Calendar.MONTH,
                    currentDate.get(Calendar.MONTH) + 1);
        }
        if (currentDate.get(Calendar.MONTH) == today.get(Calendar.MONTH)) {
            if (today.get(Calendar.DATE) != 1) {
                currentDate.set(Calendar.DATE, 1);
                // adding start date
                months.add(currentDate.getTime());
            }
            months.add(today.getTime());
            break;
        }
        currentYear++;
        if (currentYear == today.get(Calendar.YEAR)) {
            noOfMonths = today.get(Calendar.MONTH) - 1;
        } else {
            noOfMonths = 11;
        }
        currentDate.set(Calendar.YEAR, currentYear);
    }
    for (Date date : months) {
        System.out.println(format.format(date));
    }

此程序打印从今天起过去2年中的所有月份开始和结束日期。最后一个日期应该是当天!