NAME
Calendar::Indonesia::Holiday - List Indonesian public holidays
VERSION
version 0.05
SYNOPSIS
use Calendar::Indonesia::Holiday qw(
list_id_holidays
enum_id_workdays
count_id_workdays
);
# list Indonesian holidays for the year 2011, without the joint leave days
# ("cuti bersama"), show only the dates
my $res = list_id_holidays(year => 2011, is_joint_leave=>0);
# sample result
[200, "OK", [
'2011-01-01',
'2011-02-03',
'2011-02-16',
'2011-03-05',
'2011-04-22',
'2011-05-17',
'2011-06-02',
'2011-06-29',
'2011-08-17',
'2011-08-31',
'2011-09-01',
'2011-11-07',
'2011-11-27',
'2011-12-25',
]];
# list religious Indonesian holidays, show full details
my $res = list_id_holidays(year => 2011,
has_tags => ['religious'], detail=>1);
# sample result
[200, "OK", [
{date => '2011-02-16',
day => 16,
month => 2,
year => 2011,
id_name => 'Maulid Nabi Muhammad',
en_name => 'Mawlid',
en_aliases => ['Mawlid An-Nabi'],
id_aliases => ['Maulud'],
is_holiday => 1,
tags => [qw/religious religion=islam calendar=lunar/],
},
...
]];
# check whether 2011-02-16 is a holiday
my $res = list_id_holidays(date => '2011-02-16');
print "2011-02-16 is a holiday\n" if @{$res->[2]};
# enumerate working days for a certain period
my $res = enum_id_workdays(year=>2011, month=>7);
# idem, but returns a number instead. year/month defaults to current
# year/month.
my $res = count_id_workdays();
DESCRIPTION
This module provides functions to list Indonesian holidays.
This module uses Log::Any logging framework.
This module's functions has Sub::Spec specs.
FUNCTIONS
None are exported by default, but they are exportable.
count_id_workdays(%args) -> [STATUS_CODE, ERR_MSG, RESULT]
Count working days for a certain period.
Working day is defined as day that is not Saturday*/Sunday/holiday/joint leave days*. If work_saturdays is set to true, Saturdays are also counted as working days. If observe_joint_leaves is set to false, joint leave days are also counted as working days.
$AVAILABLE_YEARS.
Returns a 3-element arrayref. STATUS_CODE is 200 on success, or an error code between 3xx-5xx (just like in HTTP). ERR_MSG is a string containing error message, RESULT is the actual result.
Arguments (*
denotes required arguments):
end_date* => str
End date.
Defaults to end of current month. Either a string in the form of "YYYY-MM-DD", or a DateTime object, is accepted.
observe_joint_leaves => bool (default
1
)If set to 0, do not observe joint leave as holidays.
start_date* => str
Starting date.
Defaults to start of current month. Either a string in the form of "YYYY-MM-DD", or a DateTime object, is accepted.
work_saturdays => bool (default
0
)If set to 1, Saturday is a working day.
enum_id_workdays(%args) -> [STATUS_CODE, ERR_MSG, RESULT]
Enumerate working days for a certain period.
Working day is defined as day that is not Saturday*/Sunday/holiday/joint leave days*. If work_saturdays is set to true, Saturdays are also counted as working days. If observe_joint_leaves is set to false, joint leave days are also counted as working days.
$AVAILABLE_YEARS.
Returns a 3-element arrayref. STATUS_CODE is 200 on success, or an error code between 3xx-5xx (just like in HTTP). ERR_MSG is a string containing error message, RESULT is the actual result.
Arguments (*
denotes required arguments):
end_date* => str
End date.
Defaults to end of current month. Either a string in the form of "YYYY-MM-DD", or a DateTime object, is accepted.
observe_joint_leaves => bool (default
1
)If set to 0, do not observe joint leave as holidays.
start_date* => str
Starting date.
Defaults to start of current month. Either a string in the form of "YYYY-MM-DD", or a DateTime object, is accepted.
work_saturdays => bool (default
0
)If set to 1, Saturday is a working day.
list_id_holidays(%args) -> [STATUS_CODE, ERR_MSG, RESULT]
List Indonesian holidays in calendar.
List holidays and joint leave days ("cuti bersama").
Contains data from years 2002 to 2012 (joint leave days until 2012)..
Returns a 3-element arrayref. STATUS_CODE is 200 on success, or an error code between 3xx-5xx (just like in HTTP). ERR_MSG is a string containing error message, RESULT is the actual result.
Field selection arguments (*
denotes required arguments):
detail => bool (default
0
)Return detailed data (all fields).
fields => array
Select fields to return.
show_field_names => bool
Show field names in result (as hash/assoc).
When off, will return an array of values without field names (array/list). When on, will return an array of field names and values (hash/associative array).
Filter arguments:
q => str
Search.
Filter for date arguments:
date => str
Only return results having certain value of date.
date_contain => str
Only return results with date containing certain text.
date_match => str
Only return results with date matching specified regex.
date_not_contain => str
Only return results with date not containing certain text.
date_not_match => str
Only return results with date matching specified regex.
max_date => str
Only return results having a certain maximum value of date.
min_date => str
Only return results having a certain minimum value of date.
Filter for day arguments:
day => int
Only return results having certain value of day.
max_day => int
Only return results having a certain maximum value of day.
min_day => int
Only return results having a certain minimum value of day.
Filter for dow arguments:
dow => int
Only return results having certain value of dow.
max_dow => int
Only return results having a certain maximum value of dow.
min_dow => int
Only return results having a certain minimum value of dow.
Filter for is_holiday arguments:
is_holiday => bool (default
0
)Only return results having a true is_holiday value.
Filter for is_joint_leave arguments:
is_joint_leave => bool (default
0
)Only return results having a true is_joint_leave value.
Filter for month arguments:
max_month => int
Only return results having a certain maximum value of month.
min_month => int
Only return results having a certain minimum value of month.
month => int
Only return results having certain value of month.
Filter for tags arguments:
has_tags => array
Only return results having specified values in tags.
lacks_tags => array
Only return results not having specified values in tags.
Filter for year arguments:
max_year => int
Only return results having a certain maximum value of year.
min_year => int
Only return results having a certain minimum value of year.
year => int
Only return results having certain value of year.
Order arguments:
random => bool (default
0
)If on, return result in random order.
sort => str
Order data according to certain fields.
A list of field names separated by comma. Each field can be prefixed with '-' to specify descending order instead of the default ascending.
Paging arguments:
result_limit => int
Only return a certain number of results.
result_start => int (default
1
)Only return results from a certain position.
FAQ
What is "joint leave"?
Workers are normally granted 12 days of paid leave per year. They are free to spend it on whichever days they want. The joint leave ("cuti bersama") is a government program of recent years (since 2002) to recommend that some of these leave days be spent together nationally on certain days, especially during Lebaran (Eid Ul-Fitr). It is not mandated, but many do follow it anyway, e.g. government civil workers, banks, etc. I am marking joint leave days with is_joint_leave=1 and is_holiday=0, while the holidays themselves with is_holiday=1, so you can differentiate/select both/either one.
Holidays before 2002?
Will be provided if there is demand and data source.
Holidays after (current year)+1?
Some religious holidays, especially Vesakha, are not determined yet. Joint leave days are also usually decreed by the government in May/June of the preceding year.
SEE ALSO
This API is available on GudangAPI, http://www.gudangapi.com/ , under "calendar/id" module. To use GudangAPI, you can use WWW::GudangAPI.
AUTHOR
Steven Haryanto <stevenharyanto@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2011 by Steven Haryanto.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.