Files
dotfiles/local/share/prayertimes/README.md
T
2026-09-23 03:18:59 +05:00

42 lines
2.0 KiB
Markdown

# prayertimes data
`csv/` is every island's table, taken verbatim from the Salat MV export at
<https://github.com/WovenCoast/prayertimes-db>. Files are named by island id;
`config/prayertimes/islands.conf` maps ids to names and picks which are shown.
Home-manager links `csv/` to `~/.local/share/prayertimes/`.
Each row is `day,month,fajr,sunrise,dhuhr,asr,maghrib,isha`, times `H:MM` in
24-hour local time -- the generator folds each island's offset from Male' into
the values.
## The day and month columns are a day out
`scripts/prayertimes.sh` addresses rows by line number, not by the `day,month`
they carry. Upstream's `convert.js` labels each row with
`moment().dayOfYear(Date).year(2024)`, which sets the day number against the
*current* year and only then rewrites the year, so in a common year the
leap-year intent is lost: row 1 is labelled 31 December instead of 1 January,
29 February never appears, and 31 December appears twice.
`Date` in the upstream `salat.db` runs 0..365 and `Date 0` is 1 January. The
sibling `out/` files, `prayertime.sh` (which indexes them with `date +%j - 1`)
and the four test vectors in the db's own readme all agree. So, rows numbered
from 1:
row = day_of_year in a leap year
row = day_of_year + 1 in a common year, from 1 March on
The `+ 1` skips the 29 February row every table carries. That reproduces all
four upstream test vectors for Male' (102) -- 1 January Dhuhr 12:13 and Isha
19:25, 2 March Dhuhr 12:22 and Asr 15:35 -- in leap and common years alike,
which the `day,month` labels do not. Every file must therefore stay exactly
366 lines, in order, with no header.
## Hijri dates
The tooltip's Hijri date comes from a 720 byte Umm al-Qura month-length table
embedded in the script, covering 1440-1499 AH (2018-09-11 to 2076-11-26).
Arithmetic Hijri calendars are a day off Umm al-Qura roughly half the time,
which the table avoids. Umm al-Qura is itself a calculated calendar, so it can
still differ from a locally announced sighting.