如何找到一个月中的第一个和最后一个日期

时间:2012-07-11 10:22:10

标签: java php mysql sql

如何找到过去2年中一个月的第一个和最后一个日期。例如,今天是07-01-2012(mm-dd-yyyy);我想找到2011年的数据...... 2011年1月1日 2011年1月31日 2011年2月1日 2011年2月28日。这样的事情 谢谢。

6 个答案:

答案 0 :(得分:2)

您可以使用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));
}
}

答案 1 :(得分:1)

 select LAST_DAY('2011-01-01') from dual;

答案 2 :(得分:0)

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

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

其次,本月的第一天将始终为1

答案 3 :(得分:0)

试试这个

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'

答案 4 :(得分:0)

以下是您指定的问题的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年的所有月份开始和结束日期。最后一个日期是当天!

答案 5 :(得分:0)

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

31个月 (月份序号> 7)?(月份序号+ 1)%2 :(月份序号)%2。 如果上述等式的结果为真,那么它是31天月,否则是30天月。 仅对于seqno 2月(2月),我们必须考虑闰年计算。