Module:Release

local p = {} D = {} T = {} N = {} A = {} function ReleaseInsert(Date, Type, Name, Artist) table.insert(D, Date) table.insert(T, Type) table.insert(N, Name) table.insert(A, Artist) end ReleaseInsert('2018-01-01', 'Single', 'doubt', 'Hinatazaka46') ReleaseInsert('2018-01-05', 'Single', 'search', 'Johnny\'s West') ReleaseInsert('2018-01-09', 'Single', 'boring', 'Sexy Zone') ReleaseInsert('2018-01-13', 'Album', 'box', '=Love') ReleaseInsert('2018-01-17', 'Single', 'abashed', 'Nogizaka46') ReleaseInsert('2018-01-21', 'Single', 'bolt', 'Ballistik Boyz') ReleaseInsert('2018-01-25', 'Single', 'foamy', 'One N\' Only') ReleaseInsert('2018-01-29', 'Album', 'useless', 'The Rampage') ReleaseInsert('2018-02-02', 'Single', 'soda', 'Ryuji Imaichi') ReleaseInsert('2018-02-06', 'Single', 'irritate', 'Takeuchi Mariya') ReleaseInsert('2018-02-10', 'Single', 'evasive', 'Hinatazaka46') ReleaseInsert('2018-02-14', 'Album', 'bad', 'Johnny\'s West') ReleaseInsert('2018-02-18', 'Single', 'peep', 'Sexy Zone') ReleaseInsert('2018-02-22', 'Single', 'miscreant', '=Love') ReleaseInsert('2018-02-26', 'Single', 'knotty', 'Nogizaka46') ReleaseInsert('2018-03-02', 'Album', 'amuse', 'Ballistik Boyz') ReleaseInsert('2018-03-06', 'Single', 'rinse', 'One N\' Only') ReleaseInsert('2018-03-10', 'Single', 'panoramic', 'The Rampage') ReleaseInsert('2018-03-14', 'Single', 'vase', 'Ryuji Imaichi') ReleaseInsert('2018-03-18', 'Album', 'liquid', 'Takeuchi Mariya') ReleaseInsert('2018-03-22', 'Single', 'acidic', 'Hinatazaka46') ReleaseInsert('2018-03-26', 'Single', 'lyrical', 'Johnny\'s West') ReleaseInsert('2018-03-30', 'Single', 'abortive', 'Sexy Zone') ReleaseInsert('2018-04-03', 'Album', 'stupendous', '=Love') ReleaseInsert('2018-04-07', 'Single', 'list', 'Nogizaka46') ReleaseInsert('2018-04-11', 'Single', 'form', 'Ballistik Boyz') ReleaseInsert('2018-04-15', 'Single', 'grease', 'One N\' Only') ReleaseInsert('2018-04-19', 'Album', 'thankful', 'The Rampage') ReleaseInsert('2018-04-23', 'Single', 'report', 'Ryuji Imaichi') ReleaseInsert('2018-04-27', 'Single', 'oafish', 'Takeuchi Mariya') ReleaseInsert('2018-05-01', 'Single', 'supreme', 'Hinatazaka46') ReleaseInsert('2018-05-05', 'Album', 'butter', 'Johnny\'s West') ReleaseInsert('2018-05-09', 'Single', 'enchanting', 'Sexy Zone') ReleaseInsert('2018-05-13', 'Single', 'count', '=Love') ReleaseInsert('2018-05-17', 'Single', 'detail', 'Nogizaka46') ReleaseInsert('2018-05-21', 'Album', 'trick', 'Ballistik Boyz') ReleaseInsert('2018-05-25', 'Single', 'thank', 'One N\' Only') ReleaseInsert('2018-05-29', 'Single', 'grape', 'The Rampage') ReleaseInsert('2018-06-02', 'Single', 'bath', 'Ryuji Imaichi') ReleaseInsert('2018-06-06', 'Album', 'step', 'Takeuchi Mariya') ReleaseInsert('2018-06-10', 'Single', 'sound', 'Hinatazaka46') ReleaseInsert('2018-06-14', 'Single', 'enchanted', 'Johnny\'s West') ReleaseInsert('2018-06-18', 'Single', 'tame', 'Sexy Zone') ReleaseInsert('2018-06-22', 'Album', 'appliance', '=Love') ReleaseInsert('2018-06-26', 'Single', 'prepare', 'Nogizaka46') ReleaseInsert('2018-06-30', 'Single', 'crook', 'Ballistik Boyz') ReleaseInsert('2018-07-04', 'Single', 'present', 'One N\' Only') ReleaseInsert('2018-07-08', 'Album', 'print', 'The Rampage') ReleaseInsert('2018-07-12', 'Single', 'holiday', 'Ryuji Imaichi') ReleaseInsert('2018-07-16', 'Single', 'ignore', 'Takeuchi Mariya') ReleaseInsert('2018-07-20', 'Single', 'rock', 'Hinatazaka46') ReleaseInsert('2018-07-24', 'Album', 'hand', 'Johnny\'s West') ReleaseInsert('2018-07-28', 'Single', 'imminent', 'Sexy Zone') ReleaseInsert('2018-08-01', 'Single', 'hover', '=Love') ReleaseInsert('2018-08-05', 'Single', 'reply', 'Nogizaka46') ReleaseInsert('2018-08-09', 'Album', 'look', 'Ballistik Boyz') ReleaseInsert('2018-08-13', 'Single', 'color', 'One N\' Only') ReleaseInsert('2018-08-17', 'Single', 'queen', 'The Rampage') ReleaseInsert('2018-08-21', 'Single', 'direful', 'Ryuji Imaichi') ReleaseInsert('2018-08-25', 'Album', 'shut', 'Takeuchi Mariya') ReleaseInsert('2018-08-29', 'Single', 'simple', 'Hinatazaka46') ReleaseInsert('2018-09-02', 'Single', 'entertaining', 'Johnny\'s West') ReleaseInsert('2018-09-06', 'Single', 'press', 'Sexy Zone') ReleaseInsert('2018-09-10', 'Album', 'cake', '=Love') ReleaseInsert('2018-09-14', 'Single', 'chance', 'Nogizaka46') ReleaseInsert('2018-09-18', 'Single', 'dust', 'Ballistik Boyz') ReleaseInsert('2018-09-22', 'Single', 'fireman', 'One N\' Only') ReleaseInsert('2018-09-26', 'Album', 'splendid', 'The Rampage') ReleaseInsert('2018-09-30', 'Single', 'petite', 'Ryuji Imaichi') ReleaseInsert('2018-10-04', 'Single', 'reproduce', 'Takeuchi Mariya') ReleaseInsert('2018-10-08', 'Single', 'hellish', 'Hinatazaka46') ReleaseInsert('2018-10-12', 'Album', 'pastoral', 'Johnny\'s West') ReleaseInsert('2018-10-16', 'Single', 'writing', 'Sexy Zone') ReleaseInsert('2018-10-20', 'Single', 'regret', '=Love') ReleaseInsert('2018-10-24', 'Single', 'guttural', 'Nogizaka46') ReleaseInsert('2018-10-28', 'Album', 'absurd', 'Ballistik Boyz') ReleaseInsert('2018-11-01', 'Single', 'chew', 'One N\' Only') ReleaseInsert('2018-11-05', 'Single', 'married', 'The Rampage') ReleaseInsert('2018-11-09', 'Single', 'adamant', 'Ryuji Imaichi') ReleaseInsert('2018-11-13', 'Album', 'skip', 'Takeuchi Mariya') ReleaseInsert('2018-11-17', 'Single', 'grade', 'Hinatazaka46') ReleaseInsert('2018-11-21', 'Single', 'fairies', 'Johnny\'s West') ReleaseInsert('2018-11-25', 'Single', 'gainful', 'Sexy Zone') ReleaseInsert('2018-11-29', 'Album', 'airplane', '=Love') ReleaseInsert('2018-12-03', 'Single', 'shrug', 'Nogizaka46') ReleaseInsert('2018-12-07', 'Single', 'gratis', 'Ballistik Boyz') ReleaseInsert('2018-12-11', 'Single', 'upbeat', 'One N\' Only') ReleaseInsert('2018-12-15', 'Album', 'title', 'The Rampage') ReleaseInsert('2018-12-19', 'Single', 'pour', 'Ryuji Imaichi') ReleaseInsert('2018-12-23', 'Single', 'versed', 'Takeuchi Mariya') ReleaseInsert('2018-12-27', 'Single', 'bomb', 'Hinatazaka46') ReleaseInsert('2018-12-31', 'Album', 'tan', 'Johnny\'s West') ReleaseInsert('2019-01-04', 'Single', 'worm', 'Sexy Zone') ReleaseInsert('2019-01-08', 'Single', 'copper', '=Love') ReleaseInsert('2019-01-12', 'Single', 'horse', 'Nogizaka46') ReleaseInsert('2019-01-16', 'Album', 'chop', 'Ballistik Boyz') ReleaseInsert('2019-01-20', 'Single', 'naive', 'One N\' Only') ReleaseInsert('2019-01-24', 'Single', 'wise', 'The Rampage') ReleaseInsert('2019-01-28', 'Single', 'cooperative', 'Ryuji Imaichi') ReleaseInsert('2019-02-01', 'Album', 'shy', 'Takeuchi Mariya') ReleaseInsert('2019-02-05', 'Single', 'snatch', 'Hinatazaka46') ReleaseInsert('2019-02-09', 'Single', 'shock', 'Johnny\'s West') ReleaseInsert('2019-02-13', 'Single', 'sprout', 'Sexy Zone') ReleaseInsert('2019-02-17', 'Album', 'endurable', '=Love') ReleaseInsert('2019-02-21', 'Single', 'nasty', 'Nogizaka46') ReleaseInsert('2019-02-25', 'Single', 'volcano', 'Ballistik Boyz') ReleaseInsert('2019-03-01', 'Single', 'concern', 'One N\' Only') ReleaseInsert('2019-03-05', 'Album', 'old', 'The Rampage') ReleaseInsert('2019-03-09', 'Single', 'ruthless', 'Ryuji Imaichi') ReleaseInsert('2019-03-13', 'Single', 'stem', 'Takeuchi Mariya') ReleaseInsert('2019-03-17', 'Single', 'work', 'Hinatazaka46') ReleaseInsert('2019-03-21', 'Album', 'tenuous', 'Johnny\'s West') ReleaseInsert('2019-03-25', 'Single', 'page', 'Sexy Zone') ReleaseInsert('2019-03-29', 'Single', 'faded', '=Love') ReleaseInsert('2019-04-02', 'Single', 'magnificent', 'Nogizaka46') ReleaseInsert('2019-04-06', 'Album', 'floor', 'Ballistik Boyz') ReleaseInsert('2019-04-10', 'Single', 'flippant', 'One N\' Only') ReleaseInsert('2019-04-14', 'Single', 'shoes', 'The Rampage') ReleaseInsert('2019-04-18', 'Single', 'nifty', 'Ryuji Imaichi') ReleaseInsert('2019-04-22', 'Album', 'future', 'Takeuchi Mariya') ReleaseInsert('2019-04-26', 'Single', 'swing', 'Hinatazaka46') ReleaseInsert('2019-04-30', 'Single', 'scarf', 'Johnny\'s West') ReleaseInsert('2019-05-04', 'Single', 'cynical', 'Sexy Zone') ReleaseInsert('2019-05-08', 'Album', 'unbiased', '=Love') ReleaseInsert('2019-05-12', 'Single', 'icicle', 'Nogizaka46') ReleaseInsert('2019-05-16', 'Single', 'empty', 'Ballistik Boyz') ReleaseInsert('2019-05-20', 'Single', 'general', 'One N\' Only') ReleaseInsert('2019-05-24', 'Album', 'tempt', 'The Rampage') ReleaseInsert('2019-05-28', 'Single', 'trick', 'Ryuji Imaichi') ReleaseInsert('2019-06-01', 'Single', 'ants', 'Takeuchi Mariya') ReleaseInsert('2019-06-05', 'Single', 'yell', 'Hinatazaka46') ReleaseInsert('2019-06-09', 'Album', 'point', 'Johnny\'s West') ReleaseInsert('2019-06-13', 'Single', 'attack', 'Sexy Zone') ReleaseInsert('2019-06-17', 'Single', 'insurance', '=Love') ReleaseInsert('2019-06-21', 'Single', 'accurate', 'Nogizaka46') ReleaseInsert('2019-06-25', 'Album', 'smiling', 'Ballistik Boyz') ReleaseInsert('2019-06-29', 'Single', 'ordinary', 'One N\' Only') ReleaseInsert('2019-07-03', 'Single', 'zip', 'The Rampage') ReleaseInsert('2019-07-07', 'Single', 'question', 'Ryuji Imaichi') ReleaseInsert('2019-07-11', 'Album', 'material', 'Takeuchi Mariya') ReleaseInsert('2019-07-15', 'Single', 'bone', 'Hinatazaka46') ReleaseInsert('2019-07-19', 'Single', 'modern', 'Johnny\'s West') ReleaseInsert('2019-07-23', 'Single', 'suggest', 'Sexy Zone') ReleaseInsert('2019-07-27', 'Album', 'calm', '=Love') ReleaseInsert('2019-07-31', 'Single', 'turn', 'Nogizaka46') ReleaseInsert('2019-08-04', 'Single', 'wound', 'Ballistik Boyz') ReleaseInsert('2019-08-08', 'Single', 'inquisitive', 'One N\' Only') ReleaseInsert('2019-08-12', 'Album', 'auspicious', 'The Rampage') ReleaseInsert('2019-08-16', 'Single', 'whimsical', 'Ryuji Imaichi') ReleaseInsert('2019-08-20', 'Single', 'fang', 'Takeuchi Mariya') ReleaseInsert('2019-08-24', 'Single', 'powerful', 'Hinatazaka46') ReleaseInsert('2019-08-28', 'Album', 'border', 'Johnny\'s West') ReleaseInsert('2019-09-01', 'Single', 'furry', 'Sexy Zone') ReleaseInsert('2019-09-05', 'Single', 'appreciate', '=Love') ReleaseInsert('2019-09-09', 'Single', 'devilish', 'Nogizaka46') ReleaseInsert('2019-09-13', 'Album', 'thumb', 'Ballistik Boyz') ReleaseInsert('2019-09-17', 'Single', 'straight', 'One N\' Only') ReleaseInsert('2019-09-21', 'Single', 'many', 'The Rampage') ReleaseInsert('2019-09-25', 'Single', 'aquatic', 'Ryuji Imaichi') ReleaseInsert('2019-09-29', 'Album', 'receive', 'Takeuchi Mariya') ReleaseInsert('2019-10-03', 'Single', 'remarkable', 'Hinatazaka46') ReleaseInsert('2019-10-07', 'Single', 'snake', 'Johnny\'s West') ReleaseInsert('2019-10-11', 'Single', 'merciful', 'Sexy Zone') ReleaseInsert('2019-10-15', 'Album', 'willing', '=Love') ReleaseInsert('2019-10-19', 'Single', 'care', 'Nogizaka46') ReleaseInsert('2019-10-23', 'Single', 'crazy', 'Ballistik Boyz') ReleaseInsert('2019-10-27', 'Single', 'coil', 'One N\' Only') ReleaseInsert('2019-10-31', 'Album', 'boat', 'The Rampage') ReleaseInsert('2019-11-04', 'Single', 'historical', 'Ryuji Imaichi') ReleaseInsert('2019-11-08', 'Single', 'punch', 'Takeuchi Mariya') ReleaseInsert('2019-11-12', 'Single', 'quick', 'Hinatazaka46') ReleaseInsert('2019-11-16', 'Album', 'dare', 'Johnny\'s West') ReleaseInsert('2019-11-20', 'Single', 'steep', 'Sexy Zone') ReleaseInsert('2019-11-24', 'Single', 'uptight', '=Love') ReleaseInsert('2019-11-28', 'Single', 'jobless', 'Nogizaka46') ReleaseInsert('2019-12-02', 'Album', 'zinc', 'Ballistik Boyz') ReleaseInsert('2019-12-06', 'Single', 'smell', 'One N\' Only') ReleaseInsert('2019-12-10', 'Single', 'public', 'The Rampage') ReleaseInsert('2019-12-14', 'Single', 'wilderness', 'Ryuji Imaichi') ReleaseInsert('2019-12-18', 'Album', 'challenge', 'Takeuchi Mariya') ReleaseInsert('2019-12-22', 'Single', 'day', 'Hinatazaka46') ReleaseInsert('2019-12-26', 'Single', 'canvas', 'Johnny\'s West') ReleaseInsert('2019-12-30', 'Single', 'examine', 'Sexy Zone') ReleaseInsert('2020-01-03', 'Album', 'lying', '=Love') ReleaseInsert('2020-01-07', 'Single', 'unable', 'Nogizaka46') ReleaseInsert('2020-01-11', 'Single', 'lacking', 'Ballistik Boyz') ReleaseInsert('2020-01-15', 'Single', 'disturbed', 'One N\' Only') ReleaseInsert('2020-01-19', 'Album', 'squirrel', 'The Rampage') ReleaseInsert('2020-01-23', 'Single', 'trace', 'Ryuji Imaichi') ReleaseInsert('2020-01-27', 'Single', 'roasted', 'Takeuchi Mariya') ReleaseInsert('2020-01-31', 'Single', 'drunk', 'Hinatazaka46') ReleaseInsert('2020-02-04', 'Album', 'alleged', 'Johnny\'s West') ReleaseInsert('2020-02-08', 'Single', 'fill', 'Sexy Zone') ReleaseInsert('2020-02-12', 'Single', 'neat', '=Love') ReleaseInsert('2020-02-16', 'Single', 'rub', 'Nogizaka46') ReleaseInsert('2020-02-20', 'Album', 'juvenile', 'Ballistik Boyz') ReleaseInsert('2020-02-24', 'Single', 'jazzy', 'One N\' Only') ReleaseInsert('2020-02-28', 'Single', 'dear', 'The Rampage') ReleaseInsert('2020-03-03', 'Single', 'unite', 'Ryuji Imaichi') ReleaseInsert('2020-03-07', 'Album', 'luxuriant', 'Takeuchi Mariya') ReleaseInsert('2020-03-11', 'Single', 'white', 'Hinatazaka46') ReleaseInsert('2020-03-15', 'Single', 'overjoyed', 'Johnny\'s West') ReleaseInsert('2020-03-19', 'Single', 'quill', 'Sexy Zone') ReleaseInsert('2020-03-23', 'Album', 'tease', '=Love') ReleaseInsert('2020-03-27', 'Single', 'hideous', 'Nogizaka46') ReleaseInsert('2020-03-31', 'Single', 'repeat', 'Ballistik Boyz') ReleaseInsert('2020-04-04', 'Single', 'sheep', 'One N\' Only') ReleaseInsert('2020-04-08', 'Album', 'end', 'The Rampage') ReleaseInsert('2020-04-12', 'Single', 'class', 'Ryuji Imaichi') ReleaseInsert('2020-04-16', 'Single', 'haircut', 'Takeuchi Mariya') ReleaseInsert('2020-04-20', 'Single', 'dislike', 'Hinatazaka46') ReleaseInsert('2020-04-24', 'Album', 'store', 'Johnny\'s West') ReleaseInsert('2020-04-28', 'Single', 'gamy', 'Sexy Zone') ReleaseInsert('2020-05-02', 'Single', 'observation', '=Love') ReleaseInsert('2020-05-06', 'Single', 'cluttered', 'Nogizaka46') ReleaseInsert('2020-05-10', 'Album', 'rain', 'Ballistik Boyz') ReleaseInsert('2020-05-14', 'Single', 'letters', 'One N\' Only') ReleaseInsert('2020-05-18', 'Single', 'vacation', 'The Rampage') ReleaseInsert('2020-05-22', 'Single', 'month', 'Ryuji Imaichi') ReleaseInsert('2020-05-26', 'Album', 'condition', 'Takeuchi Mariya') ReleaseInsert('2020-05-30', 'Single', 'shiver', 'Hinatazaka46') ReleaseInsert('2020-06-03', 'Single', 'church', 'Johnny\'s West') ReleaseInsert('2020-06-07', 'Single', 'file', 'Sexy Zone') ReleaseInsert('2020-06-11', 'Album', 'bewildered', '=Love') ReleaseInsert('2020-06-15', 'Single', 'accessible', 'Nogizaka46') ReleaseInsert('2020-06-19', 'Single', 'seemly', 'Ballistik Boyz') ReleaseInsert('2020-06-23', 'Single', 'cumbersome', 'One N\' Only') ReleaseInsert('2020-06-27', 'Album', 'sack', 'The Rampage') ReleaseInsert('2020-07-01', 'Single', 'ladybug', 'Ryuji Imaichi') ReleaseInsert('2020-07-05', 'Single', 'abiding', 'Takeuchi Mariya') ReleaseInsert('2020-07-09', 'Single', 'painstaking', 'Hinatazaka46') ReleaseInsert('2020-07-13', 'Album', 'chicken', 'Johnny\'s West') ReleaseInsert('2020-07-17', 'Single', 'political', 'Sexy Zone') ReleaseInsert('2020-07-21', 'Single', 'snail', '=Love') ReleaseInsert('2020-07-25', 'Single', 'avoid', 'Nogizaka46') ReleaseInsert('2020-07-29', 'Album', 'offend', 'Ballistik Boyz') ReleaseInsert('2020-08-02', 'Single', 'magical', 'One N\' Only') ReleaseInsert('2020-08-06', 'Single', 'friction', 'The Rampage') ReleaseInsert('2020-08-10', 'Single', 'produce', 'Ryuji Imaichi') ReleaseInsert('2020-08-14', 'Album', 'broad', 'Takeuchi Mariya') ReleaseInsert('2020-08-18', 'Single', 'quixotic', 'Hinatazaka46') ReleaseInsert('2020-08-22', 'Single', 'curve', 'Johnny\'s West') ReleaseInsert('2020-08-26', 'Single', 'pigs', 'Sexy Zone') ReleaseInsert('2020-08-30', 'Album', 'coast', '=Love') ReleaseInsert('2020-09-03', 'Single', 'teeny-tiny', 'Nogizaka46') ReleaseInsert('2020-09-07', 'Single', 'surprise', 'Ballistik Boyz') ReleaseInsert('2020-09-11', 'Single', 'ill', 'One N\' Only') ReleaseInsert('2020-09-15', 'Album', 'part', 'The Rampage') ReleaseInsert('2020-09-19', 'Single', 'subtract', 'Ryuji Imaichi') ReleaseInsert('2020-09-23', 'Single', 'muddle', 'Takeuchi Mariya') ReleaseInsert('2020-09-27', 'Single', 'innate', 'Hinatazaka46') ReleaseInsert('2020-10-01', 'Album', 'song', 'Johnny\'s West') ReleaseInsert('2020-10-05', 'Single', 'dull', 'Sexy Zone') ReleaseInsert('2020-10-09', 'Single', 'uninterested', '=Love') ReleaseInsert('2020-10-13', 'Single', 'bump', 'Nogizaka46') ReleaseInsert('2020-10-17', 'Album', 'license', 'Ballistik Boyz') ReleaseInsert('2020-10-21', 'Single', 'low', 'One N\' Only') ReleaseInsert('2020-10-25', 'Single', 'bouncy', 'The Rampage') ReleaseInsert('2020-10-29', 'Single', 'clear', 'Ryuji Imaichi') ReleaseInsert('2020-11-02', 'Album', 'attractive', 'Takeuchi Mariya') ReleaseInsert('2020-11-06', 'Single', 'melodic', 'Hinatazaka46') ReleaseInsert('2020-11-10', 'Single', 'torpid', 'Johnny\'s West') ReleaseInsert('2020-11-14', 'Single', 'vulgar', 'Sexy Zone') ReleaseInsert('2020-11-18', 'Album', 'whirl', '=Love') ReleaseInsert('2020-11-22', 'Single', 'mysterious', 'Nogizaka46') ReleaseInsert('2020-11-26', 'Single', 'scared', 'Ballistik Boyz') ReleaseInsert('2020-11-30', 'Single', 'delay', 'One N\' Only') ReleaseInsert('2020-12-04', 'Album', 'wry', 'The Rampage') ReleaseInsert('2020-12-08', 'Single', 'unknown', 'Ryuji Imaichi') ReleaseInsert('2020-12-12', 'Single', 'sail', 'Takeuchi Mariya') ReleaseInsert('2020-12-16', 'Single', 'egg', 'Hinatazaka46') ReleaseInsert('2020-12-20', 'Album', 'quiver', 'Johnny\'s West') ReleaseInsert('2020-12-24', 'Single', 'instruct', 'Sexy Zone') ReleaseInsert('2020-12-28', 'Single', 'therapeutic', '=Love') ReleaseInsert('2021-01-01', 'Single', 'rich', 'Nogizaka46')

function Ordinal(anumber) if anumber % 10 == 1 then return anumber .. "st" elseif anumber % 10 == 2 then if anumber%100==12 then return anumber .. "th" else return anumber .. "nd" end elseif anumber % 10 == 3 then if anumber%100==13 then return anumber .. "th" else return anumber .. "rd" end else return anumber .. "th" end end function WhichBirthday(yyyymmdd) --Just rounds to which age is nearest. For standard uses of looking forward a week, it does the trick. _, _, y, m, d = string.find(yyyymmdd, "(%d%d%d%d)-(%d%d)-(%d%d)") difference = os.time - os.time{year=y, month=m, day=d} difference = difference / 31555008 difference = math.floor(difference+0.5) --Rounding return Ordinal(difference) end function WhereDayXStarts(mmdd) i = 0 repeat i=i+1 until string.sub( D[i], 6, 10 ) >= mmdd or i == table.getn(D) if string.sub(D[i], 6, 10) < mmdd then i = 1 end --If we've gone all the way and found squat, stick to the beginning. return i --.. " " .. string.sub( D[i], 6, 10 ) .. " >= " .. mmdd .. " or i == " .. table.getn(D) end

function WhereDateXStarts(yyyymmdd) i = 0 repeat i=i+1 until D[i] >= yyyymmdd or i == table.getn(D) if D[i] < yyyymmdd then i = 1 end return i end function WhereDayXEnds(mmdd) _, _, m, d = string.find(mmdd, "(%d%d)-(%d%d)") if d+1 < 10 then nextday = m .. "-0" .. d+1 --Needs zero padded else nextday = m .. "-" .. d+1 --Even if this date isnt' real, it should work as a point of comparison end if nextday=="12-32" then return table.getn(D) -- As long as things are properly ordered, the table ends with the end of the year. else thisdaybegins = WhereDayXStarts(mmdd) itbegins = WhereDayXStarts(nextday) if(thisdaybegins==itbegins) then --Next day starts no later than today, so no need to subtract 1. ThenWhereDayXEnds = itbegins else ThenWhereDayXEnds = itbegins - 1 --Just before where the next day starts, see. if ThenWhereDayXEnds == 0 then ThenWhereDayXEnds = table.getn(D) end --Again if the very beginning is "after", the end is... the end. end return ThenWhereDayXEnds end end

function WhereDateXEnds(yyyymmdd) i = 0 repeat i=i+1 until D[i] > yyyymmdd or i == table.getn(D) if D[i] > yyyymmdd then i = i-1 end return i end function p.upcoming(frame) num_days = tonumber(frame.args.days or 7) num_min = tonumber(frame.args.min or 2) starting = frame.args.starting or os.date("%Y-%m-%d",os.time+32400) ending = os.date("%Y-%m-%d", os.time{year=string.sub(starting,1,4), month=string.sub(starting,6,7), day=string.sub(starting,9,10)}+86400*(num_days-1)) --output = "num_days: " .. num_days .. "num_min: " .. num_min .. "starting: " .. starting .. "ending: " ..ending --if 1>0 then return output end STARTBEGINS = WhereDateXStarts(starting) ENDENDS = WhereDateXEnds(ending) --output = "ENDENDS: " .. ENDENDS --if 1>0 then return output end LISTEND = table.getn(D)

--output = "starting: " .. starting .. " ending: " .. ending .. " STARTBEGINS: " .. STARTBEGINS .. " ENDENDS: " .. ENDENDS .. " LISTEND: " .. LISTEND lastday = 0 output = "" --First read group i = STARTBEGINS while i<= ENDENDS do       thisday = string.sub( D[i], 6, 10 ) if thisday ~= lastday then --It's a new day, something should be written. output = output .. ";" .. os.date("%B %e", os.time{year=2001, month=string.sub(D[i],6,7), day=string.sub(D[i],9,10)}) .. ", "           if thisday==starting then output = output .. "Release Day!" else output = output .. "Coming Soon" end output = output .. "\n" end output = output .. ":" .. N[i] .. " by " .. A[i] .. "\n" lastday = thisday i=i+1 end return output -- .. " " .. os.clock end function p.year(frame) year = frame.args[1] or 1982 lastday = 0 output = "" for i=1, table.getn(D), 1 do       if string.sub(D[i],1,4) == year then thisday = string.sub( D[i], 6, 10 ) if thisday ~= lastday then output = output .. ";" .. os.date("%B %e", os.time{year=2001, month=string.sub(D[i],6,7), day=string.sub(D[i],9,10)}) .. "\n" end output = output .. ":" .. N[i] .. "\n" lastday = thisday end end return output end function p.month(frame) month = frame.args[1] or 1 if month == '1' or month == '01' then starting='01-01' ending='02-01' elseif month == '2' or month == '02' then starting='02-01' ending='03-01' elseif month == '3' or month == '03' then starting='03-01' ending='04-01' elseif month == '4' or month == '04' then starting='04-01' ending='05-01' elseif month == '5' or month == '05' then starting='05-01' ending='06-01' elseif month == '6' or month == '06' then starting='06-01' ending='07-01' elseif month == '7' or month == '07' then starting='07-01' ending='08-01' elseif month == '8' or month == '08' then starting='08-01' ending='09-01' elseif month == '9' or month == '09' then starting='09-01' ending='10-01' elseif month == '10' then starting='10-01' ending='11-01' elseif month == '11' then starting='11-01' ending='12-01' elseif month == '12' then starting='12-01' ending='12-31' end STARTBEGINS = WhereDayXStarts(starting) --ENDENDS = WhereDayXEnds(ending) if month=='12' then NEXTBEGINS = table.getn(D) + 1 -- Past the end else NEXTBEGINS = WhereDayXStarts(ending) end lastday = 0 output = "" i = STARTBEGINS while i < NEXTBEGINS do       thisday = string.sub( D[i], 6, 10 ) if thisday ~= lastday then --It's a new day, something should be written. output = output .. ";" .. os.date("%B %e", os.time{year=2001, month=string.sub(D[i],6,7), day=string.sub(D[i],9,10)}) .. "\n" end output = output .. ":" .. N[i] .. " (" .. string.sub(D[i], 1, 4) .. ")\n" lastday = thisday i=i+1 end return output end function p.age(frame) age = frame.args[1] or 20 output = "" starting = os.date("%Y-%m-%d",os.time+32400) --Y-m-d for today in Japan _, _, y, m, d = string.find(starting, "(%d%d%d%d)-(%d%d)-(%d%d)") LOWBORDER = y-age .. "-" .. m .. "-" .. d   if d+1<10 then --needs a leading 0 HIGHBORDER = y-age-1 .. "-" .. m .. "-0" .. d+1 else HIGHBORDER = y-age-1 .. "-" .. m .. "-" .. d+1 --Might be an improper date, but for comparison purposes should work end --output = "LOWBORDER: " .. LOWBORDER .. " HIGHBORDER: " .. HIGHBORDER --return output STARTBEGINS = WhereDayXStarts(string.sub(HIGHBORDER,6,10)) --First half i = STARTBEGINS while i<= table.getn(D) do       if D[i] >= HIGHBORDER and D[i] <= LOWBORDER then output = output .. ":" .. N[i] .. " (" .. D[i] .. ")\n" end i=i+1 end --Second half i = 1 while i<= STARTBEGINS-1 do       if D[i] >= HIGHBORDER and D[i] <= LOWBORDER then output = output .. ":" .. N[i] .. " (" .. D[i] .. ")\n" end i=i+1 end return output end function p.between(frame) startdate=frame.args[1] enddate=frame.args[2] if startdate > enddate then --You trying to screw things up? Well, we'll just flip 'em. temp = startdate startdate = enddate enddate = temp end output = "" year = string.sub(startdate,1,4) while year<=string.sub(enddate,1,4) do       if year==string.sub(startdate,1,4) then lowcomparison = string.sub(startdate,6,10) --If it's the first year, only start at the given date else lowcomparison = '01-01' end if year==string.sub(enddate,1,4) then highcomparison = string.sub(enddate,6,10) --If it's the last year, stop by the given date else highcomparison = '12-31' end i = 1 while i<= table.getn(D) do           if string.sub(D[i],1,4) == year and string.sub(D[i],6,10) >= lowcomparison and string.sub(D[i],6,10) <= highcomparison then output = output .. ":" .. N[i] .. " (" .. D[i] .. ")\n" end i=i+1 end year=tostring(year+1) end return output end function p.random math.randomseed( os.time ) return "" .. N[math.random(" end return p --