Flex сводит меня с ума, и я думаю, что это странная ошибка, связанная с тем, как он справляется с високосными годами, а не с високосными. Итак, вот мой пример. У меня есть метод dateDiff ниже, который находит количество дней или миллисекунд между двумя датами. Если я выполню следующие три утверждения, у меня возникнут странные проблемы.
dateDiff("date", new Date(2010, 0,1), new Date(2010, 0, 31));
dateDiff("date", new Date(2010, 1,1), new Date(2010, 1, 28));
dateDiff("date", new Date(2010, 2,1), new Date(2010, 2, 31));
dateDiff("date", new Date(2010, 3,1), new Date(2010, 3, 30));
Если вы посмотрите на приведенные выше сравнения дат, вы получите 30, 27, 30, 29 в качестве количества дней между датами. Странная часть в том, что я получаю 29 при сравнении с 1 марта по 31 марта. Почему? Это как-то связано с февралем только 28 дней? Если у кого-либо есть какие-либо комментарии по этому вопросу, мы будем очень признательны.
public static function dateDiff( datePart:String, startDate:Date, endDate:Date ):Number
{
var _returnValue:Number = 0;
switch (datePart) {
case "milliseconds":
_returnValue = endDate.time - startDate.time;
break;
case "date":
// TODO: Need to figure out DST problem i.e. 23 hours at DST start, 25 at end.
// Math.floor causes rounding down error with DST start at dayOfYear
_returnValue = Math.floor(dateDiff("milliseconds", startDate, endDate)/(1000 * 60 * 60 * 24));
break;
}
return _returnValue;
}