Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取MySQL DATE_ADD以与PHP相同的方式工作_Java_Php_Mysql_Date Arithmetic - Fatal编程技术网

Java 获取MySQL DATE_ADD以与PHP相同的方式工作

Java 获取MySQL DATE_ADD以与PHP相同的方式工作,java,php,mysql,date-arithmetic,Java,Php,Mysql,Date Arithmetic,在PHP中,如果您执行以下操作: $date = "2013-08-31"; $nextdate = strtotime(date("Y-m-d", strtotime($date)) . " +1 month"); $date = date( "Y-m-d", $nextdate ); echo $date; UPDATE member_account SET NextBillDate = '2013-08-31' SELECT DATE_ADD(NextBillDate, INTERVAL

在PHP中,如果您执行以下操作:

$date = "2013-08-31";
$nextdate = strtotime(date("Y-m-d", strtotime($date)) . " +1 month");
$date = date( "Y-m-d", $nextdate );
echo $date;
UPDATE member_account SET NextBillDate = '2013-08-31'
SELECT DATE_ADD(NextBillDate, INTERVAL 1 MONTH) FROM member_account
你得到的是2013-10-01,也就是说,这个月已经过去了,因为9月份只有30天

在MySQL中,如果您这样做:

$date = "2013-08-31";
$nextdate = strtotime(date("Y-m-d", strtotime($date)) . " +1 month");
$date = date( "Y-m-d", $nextdate );
echo $date;
UPDATE member_account SET NextBillDate = '2013-08-31'
SELECT DATE_ADD(NextBillDate, INTERVAL 1 MONTH) FROM member_account
您将获得2013-09-30,即无翻车

在Java中也是一样的:

GregorianCalendar oDate = new GregorianCalendar();
SimpleDateFormat Sdf = new SimpleDateFormat( "yyyy-MM-dd" );
try{oDate.setTime(Sdf.parse("2013-08-31"));} catch (Exception e) {}
String sTodayDate = Sdf.format( oDate.getTime() );

oDate.add(Calendar.MONTH, 1);
String sTodayDate2 = Sdf.format( oDate.getTime() );
sTodayDate2是“2013-09-31”


有没有一种方法可以使MySQL或Java与PHP的行为方式相同,从而在超过当月天数时可以滚动?

找到这个小Java片段,有什么诀窍吗:

    int oldDay = oDate.get(Calendar.DAY_OF_MONTH);
    oDate.add(Calendar.MONTH, 1);

    // If the old DAY_OF_MONTH was larger than our new one, then
    // roll over to the beginning of the next month.
    if (oldDay > oDate.get(Calendar.DAY_OF_MONTH)){
        oDate.add(Calendar.MONTH, 1);
        oDate.set(Calendar.DATE, 1);
    }

    String sTodayDate2 = Sdf.format( oDate.getTime() );

如果您想要31天,请编写
interval 31 day
最好的选择是在PHP中创建日期,并将该变量传递给您的语句。DATE_ADD函数会自动将其设置为下个月的最后一天(如果超过天)。我不知道还有任何其他SQL函数可以满足您的需要。@Barmar-我想要1个月,而不是31天。@Kacey-问题是,我没有PHP,我想要的结果与使用PHP得到的结果相同,但可以是Java或MySQL