0

如何找到前 2 年一个月中的第一个和最后一个日期。例如,今天是 07-01-2012(mm-dd-yyyy);我想查找 2011 年 ... 01-01-2011 01-31-2011 02-01-2011 02-28-2011 的数据。类似的东西谢谢。

4

6 回答 6

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));
}
}
于 2012-07-11T10:29:58.233 回答
1
 select LAST_DAY('2011-01-01') from dual;
于 2012-07-11T10:24:27.183 回答
0

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

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

其次,这个月的第一天永远是1

于 2012-07-11T10:25:02.690 回答
0

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

31 天月 (month seq no > 7 ) ?(month seq no + 1)%2 : (month seq no) % 2. 如果上述等式的结果为真,则为 31 天月,否则为 30 天月。仅对于月份 seqno 2(2 月),我们必须考虑闰年计算。

于 2012-07-11T10:56:32.313 回答
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 年的所有月份开始和结束日期。最后日期将是当天!

于 2012-07-11T10:49:42.717 回答
0

Try this

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'
于 2012-07-11T10:35:15.047 回答