ID:195071
 
It's been a while since I've posted here.

// Title: Get_Date, Get_Year, and /Usage
// Credit To: Audeuro
// Contributed By: Audeuro

/*
Get_Date: Retrieves the current date, in relation to the
beginning of the year. Any date returned from this can
*NOT* be trusted to work properly with time2text. It is
strictly for comparison purposes.

Get_Year: Returns the number of years that have passed
since 2000. At the time of writing, it'll return 7.
Always.

/Usage: This is a datum simply to implement the above
two. Just create a new /Usage and it fills itself with
the current date and current year. It even comes with a
few operators implemented as functions to
manipulate/compare dates.
*/


#define SECOND 10
#define MINUTE 60 * SECOND
#define HOUR 60 * MINUTE
#define DAY 24 * HOUR
#define YEAR 365 * DAY
#define LEAPYEAR 366 * DAY

proc
floor(a,b)
var/c = round(a,b)
if(c > a)
c -= b
return c

proc/Get_Date()
var/date = world.realtime
var/years = 0
while(date >= YEAR)
date -= YEAR
years++
if(years/4) date -= (DAY * round(years/4))
return floor(date, DAY)

proc/Get_Year()
var/date = world.realtime
var/years = 0
while(date >= YEAR)
date -= YEAR
years++
return years


Usage
var
Date = 0
Year = 0
New()
Date = Get_Date()
Year = Get_Year()
return ..()
proc
IsEqual(Usage/U)
return (U.Date == Date && U.Year == Year)
Minus(Usage/U)
if(U.Year == Year)
. = abs(Date - U.Date)
else if(U.Year > Year)
var/my_year = Year
while(my_year < U.Year)
if(!(my_year % 4))
if(my_year == Year) . += (LEAPYEAR - Date)
else . += LEAPYEAR
else
if(my_year == Year) . += (YEAR - Date)
else . += YEAR
my_year ++
. += U.Date
else if(U.Year < Year)
var/my_year = U.Year
while(my_year < Year)
if(!(my_year % 4))
if(my_year == U.Year) . += (LEAPYEAR - U.Date)
else . += LEAPYEAR
else
if(my_year == U.Year) . += (YEAR - U.Date)
else . += YEAR
my_year ++
. += Date