Как отображать различия между годами и месяцами в доступе в 2013 году. Я использую формулу DateDiff, но это не сработало. Кажется, DateDiff может отображать только один из символов (m, yyyy или d). Если DateDiff не может отображать как месяцы, так и годы, существуют ли другие коды для этого?Microsoft Access отображает различия между месяцами и годами
ответ
Вы не можете сделать это так просто, потому что DateDiff показывает разницу между календарными годами или месяцами, а не TimeSpan , Выше попытка вернуть эту последовательность так:
d1: 2016-02 d2: 2016-08 Y: 0 M: 6
d1: 2016-02 d2: 2016-09 Y: 0 M: 7
d1: 2016-02 d2: 2016-10 Y: 0 M: 8
d1: 2016-02 d2: 2016-11 Y: 0 M: 9
d1: 2016-02 d2: 2016-12 Y: 0 M: 10
d1: 2016-02 d2: 2017-01 Y: 1 M: 11
d1: 2016-02 d2: 2017-02 Y: 1 M: 0
d1: 2016-02 d2: 2017-03 Y: 1 M: 1
d1: 2016-02 d2: 2017-04 Y: 1 M: 2
d1: 2016-02 d2: 2017-05 Y: 1 M: 3
d1: 2016-02 d2: 2017-06 Y: 1 M: 4
Для истинного промежутка времени, вы должны будете использовать такую функцию:
Public Function YearsMonthsDays(_
ByVal datDate1 As Date, _
ByVal datDate2 As Date, _
Optional ByRef lngYears As Long, _
Optional ByRef lngMonths As Long, _
Optional ByRef lngDays As Long) _
As String
' Returns the difference in years, months, and days between datDate1 and datDate2.
'
' Calculates correctly for:
' negative differences
' leap years
' dates of 29. February
' date/time values with embedded time values
' negative date/time values (prior to 1899-12-29)
'
' Gustav Brock, Cactus Data ApS.
' 2010-03-30.
' Count of months in a calendar year.
Const cintMonths As Integer = 12
Dim datDateMonth As Date
Dim intDays As Integer
' No special error handling.
On Error Resume Next
lngMonths = Months(datDate1, datDate2)
datDateMonth = DateAdd("m", lngMonths, datDate1)
lngDays = DateDiff("d", datDateMonth, datDate2)
intDays = Sgn(lngDays)
If intDays <> 0 Then
If intDays <> Sgn(DateDiff("d", datDate1, datDate2)) Then
lngDays = 0
End If
End If
lngYears = lngMonths \ cintMonths
lngMonths = lngMonths Mod cintMonths
YearsMonthsDays = CStr(lngYears) & " year(s), " & CStr(lngMonths) & " month(s), " & CStr(lngDays) & " day(s)"
End Function
, который использует эту вспомогательную функцию:
Public Function Months(_
ByVal datDate1 As Date, _
ByVal datDate2 As Date, _
Optional ByVal booLinear As Boolean) _
As Integer
' Returns the difference in full months between datDate1 and datDate2.
'
' Calculates correctly for:
' negative differences
' leap years
' dates of 29. February
' date/time values with embedded time values
' negative date/time values (prior to 1899-12-29)
'
' Optionally returns negative counts rounded down to provide a
' linear sequence of month counts.
' For a given datDate1, if datDate2 is decreased stepwise one month from
' returning a positive count to returning a negative count, one or two
' occurrences of count zero will be returned.
' If booLinear is False, the sequence will be:
' 3, 2, 1, 0, 0, -1, -2
' If booLinear is True, the sequence will be:
' 3, 2, 1, 0, -1, -2, -3
'
' If booLinear is False, reversing datDate1 and datDate2 will return
' results of same absolute Value, only the sign will change.
' This behaviour mimics that of Fix().
' If booLinear is True, reversing datDate1 and datDate2 will return
' results where the negative count is offset by -1.
' This behaviour mimics that of Int().
' DateAdd() is used for check for month end of February as it correctly
' returns Feb. 28. when adding a count of months to dates of Feb. 29.
' when the resulting year is a common year.
'
' 2010-03-30. Cactus Data ApS, CPH.
Dim intDiff As Integer
Dim intSign As Integer
Dim intMonths As Integer
' Find difference in calendar months.
intMonths = DateDiff("m", datDate1, datDate2)
' For positive resp. negative intervals, check if the second date
' falls before, on, or after the crossing date for a 1 month period
' while at the same time correcting for February 29. of leap years.
If DateDiff("d", datDate1, datDate2) > 0 Then
intSign = Sgn(DateDiff("d", DateAdd("m", intMonths, datDate1), datDate2))
intDiff = Abs(intSign < 0)
Else
intSign = Sgn(DateDiff("d", DateAdd("m", -intMonths, datDate2), datDate1))
If intSign <> 0 Then
' Offset negative count of months to continuous sequence if requested.
intDiff = Abs(booLinear)
End If
intDiff = intDiff - Abs(intSign < 0)
End If
' Return count of months as count of full 1 month periods.
Months = intMonths - intDiff
End Function
Итак, если мне нужен дисплей, как то, что вы сделали, мне нужно использовать VBA? –
Да. Скопируйте и вставьте код в новый модуль.Затем вы можете использовать выражение 'DateSpan: YearsMonthsDays ([StartDate], [EndDate])' – Gustav
только провел несколько тестов ... Я бы очистить его немного больше, чтобы объяснить множественном, когда не требуется, но это должно дать вам хороший старт:
' Calculate Years and Months Difference
Private Sub btnCalculate_Click()
Dim intYears As Integer
Dim intMonths As Integer
intYears = (DateDiff("m", Me.txtDateStart, Me.txtDateEnd)/12)
intMonths = (DateDiff("m", Me.txtDateStart, Me.txtDateEnd) Mod 12)
Me.lblDifference.Caption = intYears & " Years " & intMonths & " Months"
End Sub
ДОПОЛНЕНИЯ к новому ПОЯСНЕНИЮ: я не проверял, но в запросе, вы должны быть в состоянии сделать это таким же образом: Положите эти выражения в заголовках столбцов
TotalYears:=(DateDiff("m", [dtStartDate], [dtEndDate])/12)
в другой колонке заголовок:
TotalMonths:=TotalYears:=(DateDiff("m", [dtStartDate], [dtEndDate]) Mod 12)
Я получил его, чтобы он работал нормально. Вот как я применил его:
Спасибо за ваш ответ. Но, что, используя VBA? Ну, на самом деле я хочу использовать запрос. Но все в порядке. В любом случае, как использовать VBA? Я никогда не пробовал это до –
Посмотрите на мой обновленный ответ, теперь, когда у меня есть более подробные сведения о том, что вы ищете. –
Еще раз спасибо. Но это все еще неправильно в TotalMonths. И для чего именно «: =» используется? Это невозможно сделать в Access –
- 1. C++: Получение диапазона между двумя месяцами/годами
- 2. SQL-запрос для выбора идентификаторов между двумя годами и месяцами
- 3. golang time.Since() с месяцами и годами
- 4. Пользовательские подборщики с месяцами и годами
- 5. Получить данные между двумя месяцами с разными годами в SQL
- 6. Флот с месяцами или годами xaxis
- 7. Различия в Visual C Оптимизация между 2008 и 2010 годами
- 8. Какова логика анализа даты и времени с годами и месяцами?
- 9. Создание и рендеринг структуры с годами и месяцами в django
- 10. Различия между Microsoft CRM и xRM
- 11. Как я могу рассчитать разницу между годами, месяцами и днями между двумя датами в Javascript?
- 12. TSQL 2008 Выполнение всего с предыдущими месяцами и годами
- 13. Python дело с месяцами и годами в массивах
- 14. Как подготовить UIPickerView с месяцами и годами в ios?
- 15. Получение разницы в дате и выход: годами - месяцами
- 16. Jquery-ui datepicker с месяцами и годами меню рельсов
- 17. Различия между Access-VBA 2010 и 2007
- 18. производят графики из таблицы с месяцами, днями, годами
- 19. Форма Microsoft Access 2016 не отображает фотографию
- 20. Как определить разницу между днями, месяцами и годами с двумя датами в JavaScript?
- 21. Различия между продуктами унифицированной связи Microsoft
- 22. Данные между годами с использованием запроса select в MS Access
- 23. Найти пробелы между месяцами
- 24. Выбрать между двумя месяцами
- 25. H2 и Microsoft Access
- 26. Каковы различия между реализациями Mono и Microsoft ASP.NET?
- 27. Различия между полной платформой Microsoft .NET 4.0 и профилем клиента
- 28. Различия между GNU C++ и Microsoft Visual C++
- 29. JavaScript вычисляет разницу между двумя датами, годами, месяцами, днями, часами, минутами
- 30. Различия между powershell и ruby
Примеры одного из моих различий во времени: #Jan 2 2007 #, #Jan 1 2016 #. Я хочу использовать запросы Access вместо –
От вашего комментария разница будет '8 год 11 месяц 30 дней' Вы хотите это или что-то другое. – harun24hr
Да, я хочу что-то вроде этого –