Date-Simple
view release on metacpan or search on metacpan
{
if (m < 1 || m > 12)
croak ("days_in_month: month out of range (%d)",
(int) m);
RETVAL = days_in_month (m, y);
}
OUTPUT:
RETVAL
IV
validate(ysv, m, d)
SV* ysv
IV m
IV d
CODE:
{
IV y;
y = SvIV (ysv);
if ((IV) SvNV (ysv) != y)
RETVAL = 0;
else if (m < 1 || m > 12)
RETVAL = 0;
else if (d < 1 || d > days_in_month (m, y))
RETVAL = 0;
else
RETVAL = 1;
}
OUTPUT:
RETVAL
void
ymd_to_days(y, m, d)
IV y
IV m
IV d
CODE:
{
IV days;
if (! ymd_to_days (y, m, d, &days))
XSRETURN_UNDEF;
else
XSRETURN_IV (days);
}
SV*
days_since_1970(date)
SV* date
CODE:
{
if (SvROK(date))
RETVAL = SvREFCNT_inc (SvRV(date));
else
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
void
days_to_ymd(days)
IV days
PPCODE:
{
IV ymd[3];
days_to_ymd (days, ymd);
EXTEND (sp, 3);
PUSHs (sv_2mortal (newSViv (ymd[0])));
PUSHs (sv_2mortal (newSViv (ymd[1])));
PUSHs (sv_2mortal (newSViv (ymd[2])));
}
IV
year(date)
SV* date
CODE:
{
IV ymd[3];
if (! SvROK (date))
XSRETURN_UNDEF;
days_to_ymd (SvIV (SvRV (date)), ymd);
RETVAL = ymd[0];
}
OUTPUT:
RETVAL
IV
month(date)
SV* date
CODE:
{
IV ymd[3];
if (! SvROK (date))
XSRETURN_UNDEF;
days_to_ymd (SvIV (SvRV (date)), ymd);
RETVAL = ymd[1];
}
OUTPUT:
RETVAL
IV
day(date)
SV* date
CODE:
{
IV ymd[3];
if (! SvROK (date))
XSRETURN_UNDEF;
days_to_ymd (SvIV (SvRV (date)), ymd);
RETVAL = ymd[2];
}
OUTPUT:
RETVAL
SV*
as_iso(date, ...)
SV* date
CODE:
{
IV ymd[3];
if (! SvROK (date))
XSRETURN_UNDEF;
days_to_ymd (SvIV (SvRV (date)), ymd);
RETVAL = newSVpvf ("%04d-%02d-%02d", (int) ymd[0] % 10000,
(int) ymd[1], (int) ymd[2]);
}
OUTPUT:
RETVAL
SV*
as_d8(date, ...)
SV* date
CODE:
{
IV ymd[3];
if (! SvROK (date))
XSRETURN_UNDEF;
days_to_ymd (SvIV (SvRV (date)), ymd);
RETVAL = newSVpvf ("%04d%02d%02d", (int)ymd[0] % 10000,
(int) ymd[1], (int) ymd[2]);
}
OUTPUT:
RETVAL
void
as_ymd(date)
SV* date
PPCODE:
{
IV ymd[3];
if (! SvROK (date))
XSRETURN_EMPTY;
days_to_ymd (SvIV (SvRV (date)), ymd);
EXTEND (sp, 3);
PUSHs (sv_2mortal (newSViv (ymd[0])));
PUSHs (sv_2mortal (newSViv (ymd[1])));
PUSHs (sv_2mortal (newSViv (ymd[2])));
}
SV*
_add(date, diff, ...)
SV* date
IV diff
CODE:
{
dSP;
SV* new_date;
SV* format;
IV days;
if (! is_object (date))
XSRETURN_UNDEF;
days = SvIV (SvRV (date)) + diff;
new_date = sv_bless(newRV_noinc(newSViv(days)),
SvSTASH(SvRV(date)));
PUSHMARK(SP);
XPUSHs(date);
PUTBACK;
call_method("default_format", G_SCALAR);
SPAGAIN;
format = POPs;
PUSHMARK(SP);
XPUSHs(new_date);
XPUSHs(format);
PUTBACK;
call_method("default_format", G_DISCARD);
RETVAL = new_date;
}
OUTPUT:
RETVAL
SV*
_subtract(left, right, reverse)
SV* left
SV* right
( run in 1.272 second using v1.01-cache-2.11-cpan-71847e10f99 )