; *******************************************************************
; DateXpander Script
; by Riamus 2005
;
; Suggestions and ideas for improvement from mIRC.com's forum
;
; This script will take a standard $duration and make it include months and years
; based on the current date.
;
; For this script to be accurate, it is only meant to be used when the $duration is
; using today's date and counting backwards (such as an uptime $duration). It
; will still be really accurate (within 3 days) even if you use a $duration that isn't
; from the current date, but it won't be exact that way.
;
; Use: $DateXpander(value,format)
; "value" must be in the format of $duration
; "format" uses y = years, m = months, w = weeks, d = days, h = hours, n = minutes, s = seconds
; "format" can also contain other information such as colors. Zero pad your colors!
; Note that commas are automatically inserted. Any other formatting can be done
; manually with this.
;
; For questions about this script, contact Riamus on IRC -- #oldgames on irc.undernet.org
; *******************************************************************
alias DateXpander {
unset %dx-dateoutput
if ($1 isalpha || $1 isnum) {
echo -a Error. Use the same format as in $chr(36) $+ duration.
halt
}
set %dx_weeks $iif($gettok($1-,1,119) isnum,$gettok($1-,1,119),0)
set %dx_days $iif($gettok($gettok($1-,1,100),-1,32) isnum,$gettok($gettok($1-,1,100),-1,32),0)
set %dx_hours $iif($gettok($gettok($1-,1,104),-1,32) isnum,$gettok($gettok($1-,1,104),-1,32),0)
set %dx_minutes $iif($gettok($gettok($1-,1,109),-1,32) isnum,$gettok($gettok($1-,1,109),-1,32),0)
set %dx_seconds $iif(sec isin $gettok($1-,$gettok($1-,0,32),32),$gettok($gettok($1-,$gettok($1-,0,32),32),1,115),0)
set %dx_totaldays $calc(%dx_weeks * 7 + %dx_days)
set %dx_outputdays %dx_totaldays
set %dx_currentmonth $date(m)
:monthstart
if ($istok(12.10.7.5,%dx_currentmonth,46)) {
set %dx_monthdays 30
}
elseif ($istok(11.9.8.6.4.2.1,%dx_currentmonth,46)) {
set %dx_monthdays 31
}
elseif (%dx_currentmonth == 3 && $calc($date(yyyy) % 4) != 0) {
set %dx_monthdays 28
}
elseif (%dx_currentmonth == 3 && $calc($date(yyyy) % 4) == 0) {
set %dx_monthdays 29
}
if (%dx_totaldays >= %dx_monthdays) {
inc %dx_months
dec %dx_totaldays %dx_monthdays
if (%dx_currentmonth != 1) {
dec %dx_currentmonth
}
else { set %dx_currentmonth 12 }
inc %dx_totalmonths
inc %dx_monthsdays %dx_monthdays
if (%dx_totalmonths == 12) {
inc %dx_yeardays %dx_monthsdays
unset %dc_monthsdays
unset %dx_totalmonths
}
goto monthstart
}
set %dx_years $int($calc(%dx_months / 12))
dec %dx_months $calc(%dx_years * 12)
set %dx_weeks $int($calc(%dx_totaldays / 7))
set %dx_totaldays $calc(%dx_totaldays % 7)
if ($2) {
if (y !isin $2 && %dx_years > 0) {
set %dx_months $calc(%dx_months + (%dx_years * 12))
set %dx_years 0
}
if (m !isin $2 && %dx_months > 0) {
set %dx_weeks $iif(%dx_years == 0,$int($calc((%dx_outputdays) / 7)),$int($calc((%dx_outputdays - %dx_yeardays) / 7)))
set %dx_totaldays $iif(%dx_years == 0,$calc((%dx_outputdays) % 7),$calc((%dx_outputdays - %dx_yeardays) % 7))
}
if (w !isin $2 && %dx_weeks > 0) {
set %dx_totaldays $calc(%dx_totaldays + (%dx_weeks * 7))
}
if (d !isin $2 && %dx_days > 0) {
set %dx_hours $calc(%dx_hours + (%dx_days * 24))
}
if (h !isin $2 && %dx_hours > 0) {
set %dx_minutes $calc(%dx_minutes + (%dx_hours * 60))
}
if (n !isin $2 && %dx_minutes > 0) {
set %dx_seconds $calc(%dx_seconds + (%dx_minutes * 60))
}
set %dateoutput $replacex($2,y,$bytes(%dx_years,b) $iif(%dx_years == 1,year $+ $chr(44) $+ $chr(32),years $+ $chr(44) $+ $chr(32)),m,$bytes(%dx_months,b) $iif(%dx_months == 1,month $+ $chr(44) $+ $chr(32),months $+ $chr(44) $+ $chr(32)),w,$bytes(%dx_weeks,b) $iif(%dx_weeks == 1,week $+ $chr(44) $+ $chr(32),weeks $+ $chr(44) $+ $chr(32)),d,$bytes(%dx_totaldays,b) $iif(%dx_totaldays == 1,day $+ $chr(44) $+ $chr(32),days $+ $chr(44) $+ $chr(32)),h,$bytes(%dx_hours,b) $iif(%dx_hours == 1,hour $+ $chr(44) $+ $chr(32),hours $+ $chr(44) $+ $chr(32)),n,$bytes(%dx_minutes,b) $iif(%dx_minutes == 1,minute $+ $chr(44) $+ $chr(32),minutes $+ $chr(44) $+ $chr(32)),s,$bytes(%dx_seconds,b) $iif(%dx_seconds == 1,second $+ $chr(44) $+ $chr(32),seconds $+ $chr(44) $+ $chr(32)))
set %dateoutput $left(%dateoutput,-1)
if ($gettok(%dateoutput,0,32) > 2) {
set %dateoutput $instok(%dateoutput,$chr(32) $+ and,-2,32)
}
}
unset %dx_*
return %dateoutput
}