Skip to content

Instantly share code, notes, and snippets.

@dwisiswant0
Last active March 12, 2024 11:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dwisiswant0/b9fbad0b30954cf45839ea04d5f4b65f to your computer and use it in GitHub Desktop.
Save dwisiswant0/b9fbad0b30954cf45839ea04d5f4b65f to your computer and use it in GitHub Desktop.
const { writeFileSync } = require('fs');
const ics = require('ics');
const imsyakiah = {"status":1,"message":"Success","prov":"JAWA BARAT","kabko":"KAB. CIREBON","hijriah":"1445","tahun":"2024","data":{"1":{"tanggal":1,"imsak":"04:26","subuh":"04:36","terbit":"05:48","dhuha":"06:15","dzuhur":"11:59","ashar":"15:05","maghrib":"18:04","isya":"19:12"},"2":{"tanggal":2,"imsak":"04:26","subuh":"04:36","terbit":"05:48","dhuha":"06:15","dzuhur":"11:59","ashar":"15:06","maghrib":"18:03","isya":"19:12"},"3":{"tanggal":3,"imsak":"04:26","subuh":"04:36","terbit":"05:48","dhuha":"06:15","dzuhur":"11:59","ashar":"15:06","maghrib":"18:03","isya":"19:11"},"4":{"tanggal":4,"imsak":"04:26","subuh":"04:36","terbit":"05:47","dhuha":"06:15","dzuhur":"11:58","ashar":"15:06","maghrib":"18:02","isya":"19:11"},"5":{"tanggal":5,"imsak":"04:26","subuh":"04:36","terbit":"05:47","dhuha":"06:15","dzuhur":"11:58","ashar":"15:06","maghrib":"18:02","isya":"19:10"},"6":{"tanggal":6,"imsak":"04:26","subuh":"04:36","terbit":"05:47","dhuha":"06:14","dzuhur":"11:58","ashar":"15:07","maghrib":"18:01","isya":"19:10"},"7":{"tanggal":7,"imsak":"04:26","subuh":"04:36","terbit":"05:47","dhuha":"06:14","dzuhur":"11:58","ashar":"15:07","maghrib":"18:01","isya":"19:09"},"8":{"tanggal":8,"imsak":"04:26","subuh":"04:36","terbit":"05:47","dhuha":"06:14","dzuhur":"11:57","ashar":"15:07","maghrib":"18:00","isya":"19:09"},"9":{"tanggal":9,"imsak":"04:25","subuh":"04:35","terbit":"05:47","dhuha":"06:14","dzuhur":"11:57","ashar":"15:07","maghrib":"18:00","isya":"19:08"},"10":{"tanggal":10,"imsak":"04:25","subuh":"04:35","terbit":"05:47","dhuha":"06:14","dzuhur":"11:57","ashar":"15:08","maghrib":"18:00","isya":"19:08"},"11":{"tanggal":11,"imsak":"04:25","subuh":"04:35","terbit":"05:47","dhuha":"06:14","dzuhur":"11:57","ashar":"15:08","maghrib":"17:59","isya":"19:08"},"12":{"tanggal":12,"imsak":"04:25","subuh":"04:35","terbit":"05:47","dhuha":"06:14","dzuhur":"11:56","ashar":"15:08","maghrib":"17:58","isya":"19:07"},"13":{"tanggal":13,"imsak":"04:25","subuh":"04:35","terbit":"05:47","dhuha":"06:14","dzuhur":"11:56","ashar":"15:08","maghrib":"17:58","isya":"19:06"},"14":{"tanggal":14,"imsak":"04:25","subuh":"04:35","terbit":"05:46","dhuha":"06:14","dzuhur":"11:55","ashar":"15:08","maghrib":"17:57","isya":"19:06"},"15":{"tanggal":15,"imsak":"04:25","subuh":"04:35","terbit":"05:46","dhuha":"06:13","dzuhur":"11:55","ashar":"15:08","maghrib":"17:57","isya":"19:05"},"16":{"tanggal":16,"imsak":"04:25","subuh":"04:35","terbit":"05:46","dhuha":"06:13","dzuhur":"11:55","ashar":"15:08","maghrib":"17:56","isya":"19:05"},"17":{"tanggal":17,"imsak":"04:24","subuh":"04:34","terbit":"05:46","dhuha":"06:13","dzuhur":"11:55","ashar":"15:08","maghrib":"17:56","isya":"19:04"},"18":{"tanggal":18,"imsak":"04:24","subuh":"04:34","terbit":"05:46","dhuha":"06:13","dzuhur":"11:54","ashar":"15:08","maghrib":"17:55","isya":"19:04"},"19":{"tanggal":19,"imsak":"04:24","subuh":"04:34","terbit":"05:46","dhuha":"06:13","dzuhur":"11:54","ashar":"15:08","maghrib":"17:55","isya":"19:04"},"20":{"tanggal":20,"imsak":"04:24","subuh":"04:34","terbit":"05:46","dhuha":"06:13","dzuhur":"11:54","ashar":"15:08","maghrib":"17:55","isya":"19:03"},"21":{"tanggal":21,"imsak":"04:24","subuh":"04:34","terbit":"05:46","dhuha":"06:13","dzuhur":"11:53","ashar":"15:08","maghrib":"17:54","isya":"19:03"},"22":{"tanggal":22,"imsak":"04:24","subuh":"04:34","terbit":"05:45","dhuha":"06:13","dzuhur":"11:53","ashar":"15:08","maghrib":"17:54","isya":"19:02"},"23":{"tanggal":23,"imsak":"04:24","subuh":"04:34","terbit":"05:45","dhuha":"06:13","dzuhur":"11:53","ashar":"15:08","maghrib":"17:53","isya":"19:02"},"24":{"tanggal":24,"imsak":"04:23","subuh":"04:33","terbit":"05:45","dhuha":"06:13","dzuhur":"11:52","ashar":"15:08","maghrib":"17:53","isya":"19:01"},"25":{"tanggal":25,"imsak":"04:23","subuh":"04:33","terbit":"05:45","dhuha":"06:12","dzuhur":"11:52","ashar":"15:08","maghrib":"17:52","isya":"19:01"},"26":{"tanggal":26,"imsak":"04:23","subuh":"04:33","terbit":"05:45","dhuha":"06:12","dzuhur":"11:52","ashar":"15:08","maghrib":"17:52","isya":"19:01"},"27":{"tanggal":27,"imsak":"04:23","subuh":"04:33","terbit":"05:45","dhuha":"06:12","dzuhur":"11:52","ashar":"15:08","maghrib":"17:51","isya":"19:00"},"28":{"tanggal":28,"imsak":"04:23","subuh":"04:33","terbit":"05:45","dhuha":"06:12","dzuhur":"11:51","ashar":"15:08","maghrib":"17:51","isya":"19:00"},"29":{"tanggal":29,"imsak":"04:23","subuh":"04:33","terbit":"05:45","dhuha":"06:12","dzuhur":"11:51","ashar":"15:08","maghrib":"17:50","isya":"18:59"}}};
const hijriah = imsyakiah.hijriah;
const tahun = imsyakiah.tahun;
const kabko = imsyakiah.kabko;
const prov = imsyakiah.prov;
const ramadhan1 = new Date('March 12, 2024');
String.prototype.toTitleCase = function() {
return this.toLowerCase().replace(/\b\w/g, s => s.toUpperCase());
};
let events = [];
for (const i in imsyakiah.data) {
const data = imsyakiah.data[i];
const day = data.tanggal;
const date = new Date(ramadhan1);
date.setDate(ramadhan1.getDate() + (day - 1));
const YYYY = date.getFullYear();
const MM = date.getMonth() + 1; // starts from 0
const DD = date.getDate();
for (const key in data) {
if (key == 'tanggal' || key == 'dhuha' || key == 'terbit') continue;
const pray = key.toTitleCase();
const time = data[key].split(':');
const prayTimeH = parseInt(time[0]);
const prayTimeM = parseInt(time[1]);
switch (key) {
case 'maghrib':
busyStatus = 'BUSY';
break;
default:
busyStatus = 'OOF';
break;
}
const loc = `${kabko}, ${prov}`.toTitleCase();
const cat = `Imsyakiah Ramadhan ${hijriah} H/${tahun} M (${loc})`;
const dur = (key == 'maghrib' ? 45 : 0); // soale madhang
const event = {
productId: `imsyakiah-ramadhan-${hijriah}h`,
alarms: [{
action: 'display',
description: 'Reminder',
trigger: { minutes: 10, before: true },
}],
busyStatus: busyStatus,
calName: cat,
categories: [cat],
classification: 'PRIVATE',
duration: { minutes: dur },
location: loc,
start: [YYYY, MM, DD, prayTimeH, prayTimeM],
status: 'CONFIRMED',
title: pray,
transp: 'TRANSPARENT',
}
events.push(event);
}
}
try {
const output = `${__dirname}/imsyakiah.ics`;
ics.createEvents(events, (e, v) => {
if (e) throw new Error(e);
writeFileSync(output, v);
console.log('Saved to ' + output);
})
} catch(e) {
console.error(e);
}
@dwisiswant0
Copy link
Author

Deps

npm i -S ics

Set up

The imsyakiah constant is returned from https://bimasislam.kemenag.go.id/jadwalimsakiyah.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment