Member 11403304 Ответов: 2

Как вычесть 1 месяц из моей переменной, имеющей будущую дату?


То, что я пытаюсь сделать, - это использовать SQL get last month report. Поэтому, если запрос выполняется сегодня (07 мая 2018 года), я должен получить отчет за последний месяц, то есть с 1 по 30 апреля.
В моем vb.net код запроса выглядит следующим образом strSQL = GetSql(dtmStartDateTime, dtmEndDateTime).
Для тестирования я использую будущую дату (06/01/2018), которая находится в строковой переменной strALTCURDATE.
Как я могу использовать эту переменную как dtmStartDateTime, а затем вычесть из нее 1 месяц и использовать ее как dtmEndDateTime?
Мне также нужно преобразовать strALTCURDATE в дату.
Таким образом, dtmStartDateTime должно быть dtmStartDateTime = strALTCURDATE, а dtmEndDateTime должно быть dtmStartDateTime - 1 месяц, который является 31 мая.
Может кто-нибудь помочь мне с этим, пожалуйста?

Мой dtmEndDateTime отображается как 5/6/2018, но я бы хотел, чтобы он отображался как 5/31/2018.

Что я уже пробовал:

Я уже пробовал
dtmStartDateTime = Дата-Время.Разбор(strALTCURDATE)
dtmEndDateTime = DateTime(AddInterval.Month, -1, dtmStartDateTime)
strSQL = GetSql(dtmStartDateTime, dtmEndDateTime)

2 Ответов

Рейтинг:
9

User 7429338

Вы могли бы сделать это вот так:

Dim curDateTime = DateTime.Parse(strALTCURDATE)
Dim prevMonth = curDateTime.AddMonths(-1)

Dim firstOfPrevMonth = New Date(prevMonth.Year, prevMonth.Month, 1)
Dim firstOfCurMonth = New Date(curDateTime.Year, curDateTime.Month, 1)
Dim lastOfPrevMonth = firstOfCurMonth.AddDays(-1)


"firstOfPrevMonth" будет вашей датой начала, а "lastOfPrevMonth" - датой окончания.


Maciej Los

5ed!

Рейтинг:
2

Maciej Los

Проверить это:

Dim tdate As DateTime = DateTime.Today
Dim sdate As DateTime = New DateTime(tdate.Year, tdate.Month-1, 1)
Dim edate As DateTime = sdate.AddMonths(1).AddDays(-1)


Console.WriteLine("Today is: '{0}'", tdate.ToString("yyyy-MM-dd"))
Console.WriteLine("Report date range is: '{0}' and '{1}'", sdate.ToString("yyyy-MM-dd"), edate.ToString("yyyy-MM-dd"))

Результат:
Today is: '2018-05-07'
Report date range is: '2018-04-01' and '2018-04-30'


[no name]

Хорошая штука, кажется, мы отправили сообщение в одну и ту же секунду :)

Maciej Los

Спасибо.