Публикация
Функция добавления к дате Н-ое количество дней (лет, месяцев, часов, минут)
28 июля 2009 11:44
Функция возвращает дату с прибавленным количеством временНых единиц.
function AddDateDateUnits(StartDate, UnitCount, UnitID) {
StartDate = new Date(StartDate);
if (IsEmptyValue(UnitID)) {
UnitID = duDay;
}
var FullYear = StartDate.getFullYear();
var Month = StartDate.getMonth();
var Day = StartDate.getDate();
var Hour = StartDate.getHours();
var Min = StartDate.getMinutes();
var EndDate = StartDate;
switch (UnitID) {
case duYear: EndDate = new Date(FullYear + UnitCount, Month, Day,
Hour, Min);
break;
case duMon: EndDate = new Date(FullYear, Month + UnitCount, Day,
Hour, Min);
break;
case duDay: EndDate = new Date(FullYear, Month, Day + UnitCount,
Hour, Min);
break;
case duHour: EndDate = new Date(FullYear, Month, Day, Hour
+ UnitCount, Min);
break;
case duMin: EndDate = new Date(FullYear, Month, Day, Hour,
Min + UnitCount);
break;
}
return EndDate;
}
StartDate = new Date(StartDate);
if (IsEmptyValue(UnitID)) {
UnitID = duDay;
}
var FullYear = StartDate.getFullYear();
var Month = StartDate.getMonth();
var Day = StartDate.getDate();
var Hour = StartDate.getHours();
var Min = StartDate.getMinutes();
var EndDate = StartDate;
switch (UnitID) {
case duYear: EndDate = new Date(FullYear + UnitCount, Month, Day,
Hour, Min);
break;
case duMon: EndDate = new Date(FullYear, Month + UnitCount, Day,
Hour, Min);
break;
case duDay: EndDate = new Date(FullYear, Month, Day + UnitCount,
Hour, Min);
break;
case duHour: EndDate = new Date(FullYear, Month, Day, Hour
+ UnitCount, Min);
break;
case duMin: EndDate = new Date(FullYear, Month, Day, Hour,
Min + UnitCount);
break;
}
return EndDate;
}
Функция возвращает разницу между датами в указанных временНых единицах.
Параметр IsCorrectDays означает, что будет произведен расчет в абсолютных днях.
function GetDateDiffByUnitID(StartDate, EndDate, UnitID, IsCorrectDays) {
StartDate = new Date(StartDate);
EndDate = new Date(EndDate);
if (IsEmptyValue(UnitID)) {
UnitID = duDay;
}
var FullYear = StartDate.getFullYear();
var Month = StartDate.getMonth();
var Day = StartDate.getDate();
var Hour = StartDate.getHours();
var Min = StartDate.getMinutes();
var UnitCount = 0;
var YearsCount = EndDate.getFullYear() - FullYear;
if (duYear == UnitID) {
return YearsCount;
}
var MonthCount = YearsCount * 12 + (EndDate.getMonth() - Month);
if (duMon == UnitID) {
return MonthCount;
}
StartDate.setSeconds(0);
StartDate.setMilliseconds(0);
EndDate.setSeconds(0);
EndDate.setMilliseconds(0);
if (duDay == UnitID) {
if (!IsCorrectDays) {
StartDate.setHours(0);
StartDate.setMinutes(0);
EndDate.setHours(0);
EndDate.setMinutes(0);
}
var DaysCount = Math.floor((EndDate.getTime()
- StartDate.getTime())/1000/60/60/24);
return DaysCount;
}
if (duHour == UnitID) {
var HoursCount = Math.floor((EndDate.getTime()
- StartDate.getTime())/1000/60/60);
return HoursCount;
}
if (duMin == UnitID) {
var MinsCount = Math.floor((EndDate.getTime()
- StartDate.getTime())/1000/60);
return MinsCount;
}
}
StartDate = new Date(StartDate);
EndDate = new Date(EndDate);
if (IsEmptyValue(UnitID)) {
UnitID = duDay;
}
var FullYear = StartDate.getFullYear();
var Month = StartDate.getMonth();
var Day = StartDate.getDate();
var Hour = StartDate.getHours();
var Min = StartDate.getMinutes();
var UnitCount = 0;
var YearsCount = EndDate.getFullYear() - FullYear;
if (duYear == UnitID) {
return YearsCount;
}
var MonthCount = YearsCount * 12 + (EndDate.getMonth() - Month);
if (duMon == UnitID) {
return MonthCount;
}
StartDate.setSeconds(0);
StartDate.setMilliseconds(0);
EndDate.setSeconds(0);
EndDate.setMilliseconds(0);
if (duDay == UnitID) {
if (!IsCorrectDays) {
StartDate.setHours(0);
StartDate.setMinutes(0);
EndDate.setHours(0);
EndDate.setMinutes(0);
}
var DaysCount = Math.floor((EndDate.getTime()
- StartDate.getTime())/1000/60/60/24);
return DaysCount;
}
if (duHour == UnitID) {
var HoursCount = Math.floor((EndDate.getTime()
- StartDate.getTime())/1000/60/60);
return HoursCount;
}
if (duMin == UnitID) {
var MinsCount = Math.floor((EndDate.getTime()
- StartDate.getTime())/1000/60);
return MinsCount;
}
}
Необходимо также подключить к скрипту, где будут описаны функции,
перечисление - enm_DurationUnit (Единицы измерения времени)
duMin - минуты
duHour - часы
duDay - дни
duMon - месяца
duYear - года
8 октября 2010 18:33
Под рукой нет администратора, но по-моему все эти функции описаны в scr_DateUtils, нет?
11 октября 2010 10:25
Там в аналогичной функции GetDateDiffByUnitID нет месяца и года, а также признака IsCorrectDays. А в функции AddDateDays прибавляются только дни.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать