AbushakirJs (ባሕረ ሃሳብ)
Bahire Hasab /'bəhrɛ həsəb/" means “An age with a descriptive and chronological number.” It's also seen as Hasabe Bahir, likening time to a vast sea.
Originating from Ge’ez and known in Arabic as Abu Shakir, this system was devised by the 12th Coptic Pope of Alexandria, Pope St. Dimitri, to track time through the Ethiopian calendar.
What is AbushakirJs?
AbushakirJs is a fully native JavaScript and TypeScript library that implements the Ethiopian calendar and datetime system, based on the UNIX Epoch (milliseconds since January 1, 1970 UTC). It is not a conversion layer over Gregorian — it's a first-class timekeeping model.
Works directly with the Ethiopian calendar
Handles date-time, holidays, feasts, and calendar math
ESDate-compatible API (new!)
Ideal for frontend and backend usage (Node, browsers)
Getting Started
Install
npm i abushakir
Import
import {
EtDatetime,
ETC,
BahireHasab,
ConvertToEthiopic
} from 'abushakir';
Documentation
Docs: AbushakirJs Docs →
Demo App: Ethiopian Calendar (Vue)
Features
Ethiopian Datetime (EtDatetime
)
EtDatetime
)const now = new EtDatetime(); // 2012-07-28T17:18:31.466
console.log(now.date); // { year: 2012, month: 7, day: 28 }
console.log(now.time); // { h: 17, m: 18, s: 31 }
Supports:
Full date-time creation
Time arithmetic (
add
,subtract
,difference
)Comparison methods (
isAfter
,isBefore
,isAtSameMomentAs
)ISO 8601 output
Temporal API (
toTemporalInstant()
)ECMAScript-style API:
getDay
,getFullYear
,getMonth
,getDate
,setDate
, etc.toDateString
,toLocaleString
,toUTCString
, etc.
Calendar Grid (ETC
)
ETC
)const calendar = new ETC(2011, 13, 4);
calendar.monthDays(); // [2012, 7, 1, 1]
calendar.monthDays(true, true); // Iterable month representation
console.log(calendar.nextMonth); // ETC instance for next month
console.log(calendar.prevYear); // ETC instance for same month last year
Bahire Hasab (የባሕረ ሐሳብ ሒሳብ)
const bh = new BahireHasab(2011);
bh.getEvangelist(true); // => ሉቃስ
bh.getSingleBealOrTsom('ትንሳኤ'); // => {month: ሚያዝያ, date: 20}
const fasts = bh.allAtswamat;
Arabic to Ethiopic Numerals
const nums = [1, 10, 105, 9999];
nums.map(ConvertToEthiopic);
// Output: ['፩', '፲', '፻፭', '፺፱፻፺፱']
Calendar Conversion
Gregorian → Ethiopian
const gregorian = Date.now();
const ethiopian = new EtDatetime(gregorian);
console.log(ethiopian.toIso8601String());
Ethiopian → Gregorian
const etDate = new EtDatetime(2013, 1, 12);
console.log(new Date(etDate.moment).toISOString());
Example
const et1 = new EtDatetime(2012, 7, 4);
const et2 = new EtDatetime(2012, 7, 26);
const duration = et2.difference(et1);
console.log(duration.inDays); // 22
console.log(et2.isAfter(et1)); // true
Contact
Reach out with questions or feedback: nabute925@gmail.com
License
This project is licensed under the MIT License. See the LICENSE file for details.
Last updated
Was this helpful?