четверг, 24 февраля 2011 г.

JavaScript: calculating date differences

/**
* The algorithm for calculating date differences
* MD , MV - arrays with days' count per month
* Output params: yb - the interval's begining year
* mb - the interval's begining month
* db - the interval's begining day
* yi - the interval's end year
* mi - the interval's end month
* di - the interval's end day
*/

var MD = [ 31 , 28 , 31 ,
30 , 31 , 30 ,
31 , 31 , 30 ,
31 , 30 , 31 ] ;

var MV = [ 31 , 29 , 31 ,
30 , 31 , 30 ,
31 , 31 , 30 ,
31 , 30 , 31 ] ;

var WS = WScript.CreateObject( "WScript.Shell" ) ;

function gage ( yb , mb , db , yi , mi , di )
{
var y , m , d , s , mm , bd , bm , by ;

y = m = d = bd = bm = by = 0 ;
s = "" ;

y = yi - yb ;
if ( di < db ) {
mm = mi ;
if ( mm == 1 ) mm = 12 ;
else mm-- ;

if (( yi % 4 == 0 ) && ( ( yi % 100 != 0 ) || ( yi % 400 == 0 ) ))
d = MV [ mm - 1 ] - db + di ;
else d = MD [ mm - 1 ] - db + di ;
bd = 1 ;
} else d = di - db ;

if ( mi < mb ) {
m = 12 - mb + mi - bd ;
bm = 1 ;
} else {
if (( mi == mb ) && bd ) m = 11 ;
else m = mi - mb - bd ;
}

if ( bd == 1 && bm == 1 ) by = 1 ;
else if ( bd == 0 && bm == 1 ) by = 1 ;
else if ( bd == 1 && ( mi == mb ) ) by = 1 ;
y = yi - yb - by ;

if ( y < 0 ) y = 0 ;
if ( m < 0 ) m = 0 ;
if ( d < 0 ) d = 0 ;

s = "years: " + y + " months: " + m + " days: " + d ;

return s ;
}

WS.Popup ( gage ( 2010 , 09 , 28 , 2011 , 01 , 12 ) ) ;

Комментариев нет:

Отправить комментарий