CalendarUtil.addMonthsToDate () и JsDate.setMonth () дают неверную дату в GWT - PullRequest
0 голосов
/ 05 сентября 2018

В случае даты окончания последнего месяца - 31 августа 2018 года, и я хочу получить дату окончания месяца за последние три месяца - 30 июня 2018 года, но используя CalendarUtil.addMonthsToDate () и setMonth () JsDate, оба API дают мне дату как 1 июля 2018 года. Для получения более подробной информации см. Приведенный ниже код:

Date currentMonthFirstDate = new Date();
CalendarUtil.setToFirstDayOfMonth(currentMonthFirstDate);//1-Sep

//Setting the Last month end date
final Date lastMonthEndDate = CalendarUtil.copyDate(currentMonthFirstDate);
CalendarUtil.addDaysToDate(lastMonthEndDate, -1);//31st Aug

final Date lastThreeMonthEndDate = CalendarUtil.copyDate(lastMonthEndDate);
CalendarUtil.addMonthsToDate(lastThreeMonthEndDate, -2);//Setting to 1st Sep but I want 30th june

Может кто-нибудь предложить мне решение для того же. Так что я получу точную дату независимо от того, в каком месяце будет 31 или 30 дней.

PS: я не могу использовать java.util.Calendar в коде на стороне клиента GWT.

1 Ответ

0 голосов
/ 05 сентября 2018

Вы очень близки к желаемому результату:)

Вы нашли правильный способ перейти к концу месяца: setToFirstDayOfMonth, тогда addDaysToDate (-1 день) приведет вас к последнему дню предыдущего месяца.

Если вы посмотрите на реализацию метода addMonthsToDate, вы увидите, что он не проверяет, сколько дней в данном месяце. Таким образом, вы можете получить недействительные даты, такие как Feb 30th или Jun 31st. Конечно, эти даты будут автоматически фиксированными и будут Mar 2nd и Jul 1st соответственно.

Таким образом, вы не можете использовать метод addMonthsToDate в этом случае. Но вы уже знаете, как получить последний день предыдущего месяца - просто используйте его еще два раза, чтобы получить lastThreeMonthEndDate:

Date currentMonthFirstDate = new Date();
CalendarUtil.setToFirstDayOfMonth(currentMonthFirstDate);   //1st Sep

//Setting the Last month end date
final Date lastMonthEndDate = CalendarUtil.copyDate(currentMonthFirstDate);
CalendarUtil.addDaysToDate(lastMonthEndDate, -1);           //31st Aug

final Date lastThreeMonthEndDate = CalendarUtil.copyDate(lastMonthEndDate);
CalendarUtil.setToFirstDayOfMonth(lastThreeMonthEndDate);   //1st Aug
CalendarUtil.addDaysToDate(lastThreeMonthEndDate, -1);      //31st Jul
CalendarUtil.setToFirstDayOfMonth(lastThreeMonthEndDate);   //1st Jul
CalendarUtil.addDaysToDate(lastThreeMonthEndDate, -1);      //30th Jun

Просто для рассмотрения: вы можете безопасно использовать метод addMonthsToDate, при условии, что вы setToFirstDayOfMonth сначала. Таким образом, вы не получите недействительные даты, потому что день 1st действителен для любого месяца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...