Показать сообщение отдельно
Старый 10.11.2006, 17:38   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
? Есть ли в Axapta функция DateAdd ?
Даа... Насколько компактнее и прозрачнее получается алгоритм на VBA при использовании функции DateAdd:
Код:
Sub VBA_TestDifferenceBetweenTwoDates()
    Dim dateBeg As Date, dateEnd As Date, dateTest As Date
    Dim y1 As Integer, m1 As Integer, y2 As Integer, m2 As Integer
    Dim ys As Integer, ms As Integer, ds As Integer
 
    dateBeg = DateSerial(2006, 1, 31)
    dateEnd = DateSerial(2006, 4, 30)
 
    y1 = Year(dateBeg): m1 = Month(dateBeg)
    y2 = Year(dateEnd): m2 = Month(dateEnd)
 
    ms = (y2 * 12 + m2) - (y1 * 12 + m1)  'предварительная разница в месяцах
    dateTest = DateAdd("m", ms, dateBeg)  'пробная дата на ms месяцев от начала
    ds = DateDiff("d", dateTest, dateEnd) 'предварит-ная разница в днях
                                          'в пределах последнего месяца (+/-)
 
    If ds < 0 Then 'ЕСЛИ предварит-но "перебрали" с целыми месяцами от начала
        ms = ms - 1                           'ТО окончат-ная разница в месяцах
        dateTest = DateAdd("m", ms, dateBeg)  'новая "пробная" дата
        ds = DateDiff("d", dateTest, dateEnd) 'окончательная разница в днях (+)
    End If
 
    ys = ms \ 12: ms = ms Mod 12 'годы - тривиально от месяцев
 
    Debug.Print ys, ms, ds '<- Годы, Месяцы, Дни разницы соответственно
 
    'или еще и недели внутри месяца :-)
    Debug.Print ys, ms, ds \ 7, ds Mod 7 '<- Годы, Месяцы, Недели, Дни разницы
End Sub
Вместо функции DateDiff для дней можно использовать и просто операцию вычитания между двумя датами.
А вот есть ли в Аксе приемлемый аналог функции DateAdd ?

P.S. 30.01.07
Как выяснилось здесь, для месяцев - есть. В Global, называется dateMthFwd.