Цитата:
Сообщение от
AndyD
В Excel дата 00.01.1900 соответствует значению 0 в типе дата, а в Ax - это 01.01.1900.
На деле обнаруживается, что функция date2num возвращает 0 для любой даты 1900 года - в том числе и для "ошибочной" 29\02\1900 и даже для даты-призрака 00\01\1900. И лишь 01\01\1901 сразу становится видно это расхождение в 2 дня: 365 - в Аксапте и 367 - в Excel.
Припоминаю похожее обсуждение на эту тему:
dateNull() и endMth()
P.S. Хм... интересно, что Аксапта, похоже, проверяет литерал даты на корректность не как единую дату, а по отдельности - день, месяц, год. При этом дни считаются корректными в диапазоне от 1 до 31 для ЛЮБОГО (!) месяца. Поэтому становится возможным ввести дату 31 февраля 2009 года. При этом функция date2num возвращает целое значение для ближайшего предыдущего реально существующего дня, т.е. для 28.02.2009. И лишь 32-е февраля наконец-таки вызывает ошибку компиляции:
X++:
static void Job192(Args _args)
{
;
info(strFmt('27 - %1', date2num(27\02\2009))); // 39869
info(strFmt('28 - %1', date2num(28\02\2009))); // 39870
info(strFmt('29 - %1', date2num(29\02\2009))); // 39870 -- несуществ.
info(strFmt('30 - %1', date2num(30\02\2009))); // 39870 -- несуществ.
info(strFmt('31 - %1', date2num(31\02\2009))); // 39870 -- несуществ.
//info(strFmt('32 - %1', date2num(32\02\2009))); -- ошибка компиляции
info(strFmt('01 - %1', date2num(01\03\2009))); // 39871
}
Ax 3.0 SP4