[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вычеслить между датами
BeerMan88
Здравствуйте!
Помогите пожалуйста составить код для вычисления между двумя датами количество выходных (субота, воскресение).
Заранее спасибо!
Игорь_Vasinsky
ничё себе заявка)

рублей на 400 потягивает.

сам пытался?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
BeerMan88
нашол вот функцию но не совсем то что надо!
function Calculate( endDay, startDay, holidaysData, changedHolidaysData, workdayCount ) {
function FormatDate( d ) {
return d.getDate( ) + '.' + ( d.getMonth( ) + 1 ) + '.' + d.getFullYear( );
}
function IsHoliday( date ) {
return date.getDay( ) == 0 || date.getDay( ) == 6;
}
function IsYesterday( d, d1 ) {
if ( ! d ) {
return false;
}
var d2 = new Date( d1.getFullYear( ), d1.getMonth( ), d1.getDate( ) - 1 );
return d2.getDate( ) == d.getDate( ) && d2.getMonth( ) == d.getMonth( ) && d2.getFullYear( ) == d.getFullYear( );
}
function IsSameDay( d1, d2 ) {
return d1.getFullYear( ) == d2.getFullYear( ) && d1.getMonth( ) == d2.getMonth( ) && d1.getDate( ) == d2.getDate( );
}
function IsHolidayEx( d ) {
var isH = IsHoliday( d );
for ( var h = 0;
h < changedHolidaysData.length;
++
h ) {
var holiday = changedHolidaysData[ h ];
var dateCheck = String2Date( isH ? holiday.dateFrom : holiday.dateTo );
if ( dateCheck.getMonth( ) == d.getMonth( ) && dateCheck.getDate( ) == d.getDate( ) && dateCheck.getFullYear( ) == d.getFullYear( ) ) {
return ! isH;
}
}

return isH;
}
var startDate = startDay.getTime( ) <= endDay.getTime( ) ? startDay : endDay;
var endDate = startDay.getTime( ) <= endDay.getTime( ) ? endDay : startDay;
var startyear = startDate.getFullYear( );
var endyear = endDate.getFullYear( );
var holidays = new Array( );
var workdays = new Array( );
for ( var y = startyear;
y <= endyear;
++
y )GetYearData( y );
function GetYearData( year ) {
var transfers = [ ];
var lastHoliday = 0;
var sequence = 0;
for ( var m = 0;
m < 12;
++
m ) {
for ( var d = 1;
d < 32;
++
d ) {
var date = new Date( year, m, d );
if ( date.getMonth( ) != m ) {
continue;
}
var isH = false;
for ( var h = 0;
h < holidaysData.length;
++
h ) {
var holiday = holidaysData[ h ];
var startDate = String2Date( holiday.startDate );
var endDate = String2Date( holiday.endDate );
if ( m >= startDate.getMonth( ) && d >= startDate.getDate( ) && m <= endDate.getMonth( ) && d <= endDate.getDate( ) ) {
isH = true;
if ( IsHolidayEx( date ) ) {
transfers.push( date );
}
}
}

if ( ! isH && IsYesterday( lastHoliday, date ) ) {
if ( IsHoliday( date ) ) {
isH = true
} else if ( transfers.length ) {
var transferDate = transfers.shift( );
isH = true;
}
}

for ( var h = 0;
h < changedHolidaysData.length;
++
h ) {
var holiday = changedHolidaysData[ h ];
var dateTo = String2Date( holiday.dateTo );
if ( dateTo.getMonth( ) == m && dateTo.getDate( ) == d && dateTo.getFullYear( ) == year ) {
isH = true;
}
}

if ( isH ) {
holidays.push( date );
lastHoliday = date;
}
if ( IsYesterday( lastHoliday, date ) ) {
lastHoliday = 0;
}
}
}

for ( var h = 0;
h < changedHolidaysData.length;
++
h ) {
var workday = changedHolidaysData[ h ];
var dateFrom = String2Date( workday.dateFrom );
if ( dateFrom.getFullYear( ) == year ) {
workdays.push( dateFrom );
}
}
}


function IsStateHoliday( d ) {
for ( var i in holidays ) {
if ( IsSameDay( d, holidays[ i ] ) ) return true;
}
return false;
}
function IsTransferredWorkday( d ) {
for ( var i in workdays ) {
if ( IsSameDay( d, workdays[ i ] ) ) return true;
}
return false;
}
var counteddays = 0;
var next = new Date( startDate.getFullYear( ), startDate.getMonth( ), startDate.getDate( ) );
while ( next.getTime( ) < endDate.getTime( ) ) {
if ( IsTransferredWorkday( next ) )counteddays ++; else if ( IsStateHoliday( next ) ); else if ( IsHolidayEx( next ) ); else counteddays ++;
next = new Date( next.getFullYear( ), next.getMonth( ), next.getDate( ) + 1 );
}
workdayCount.SetValue( counteddays );
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.