Ethiopian · Gregorian
TypeScript Ready

Et-Calendar

The React library built for Ethiopian & Gregorian calendars dual calendar support, composable components, and full TypeScript types. Drop it in, and it just works.

Quick Installation

Terminal
npm install et-calendar

Powerful Features

Everything you need to build applications with Ethiopian and Gregorian calendar support.

Dual Calendar Support

Seamlessly work with both Ethiopian and Gregorian calendars in a single interface.

DateTime Components

Complete date and time selection with customizable formats and time zones.

TypeScript Ready

Full TypeScript support with comprehensive type definitions for better development experience.

Fully Customizable

Style with Tailwind CSS or standard CSS. Complete control over appearance and behavior.

Localization Support

Built-in support for Amharic and English with extensible localization system.

Performance Optimized

Lightweight, fast, and optimized for production applications with minimal bundle size.

Quick Installation

Terminal
npm install et-calendar

Quick Start Guide

Get up and running with Et-Calendar in minutes. Here are the most common use cases.

import { useState } from "react";
import { EthiopianDate } from "et-calendar/lib";
import { DatePicker } from "et-calendar";

function App() {
  const [date, setDate] = useState<Date>(() => new Date());
  const [ethDate, setEthDate] = useState(() => EthiopianDate.toEth(new Date()));

  const handleDateChange = (newDate: Date) => {
    setDate(newDate);
    setEthDate(EthiopianDate.toEth(newDate));
  };

  return (
    <DatePicker
      selectedDate={date} // The selected date
      onDateChange={handleDateChange} // This function will be called when a date is selected
      showCalendars="both" // Options: "gregorian" | "ethiopian" | "both"
      viewFirst="Gregorian" // Options: "Gregorian" | "Ethiopian"
      dateFormat="MMMM dd, yyyy" // Time tokens will be ignored in DatePicker
      closeOnSelect // Close popover after day pick
    />
  );
}

export default App;

Interactive Date Pickers

Experience the power of Et-Calendar with these interactive examples. Try different configurations and see how they work in real-time.

Gregorian First View
Gregorian View First (Both Calendars)
Gregorian Only
Compact Format
Date & Time (Gregorian First)
Ethiopian First View
Ethiopian View First (Both Calendars)
Ethiopian Only
Compact Format
Date & Time (Ethiopian First)

Selected Date Information

View the selected date in both calendar systems with various formatting options.

Gregorian Calendar

Full Date

June 23, 2026

Formatted

2026-06-23

Ethiopian Calendar

Full Date

ሰኔ 16, 2018

Formatted DateTime

2018-10-16 17:17:12

Ethiopian Date Formatting Examples

Explore different formatting options for Ethiopian dates. Each example shows the format string and the resulting output.

Year-Month-Day
yyyy-MM-dd

Standard date format, commonly used in technical contexts

2018-10-16

Day/Month/Year
dd/MM/yyyy

Common format used in Ethiopia and many other countries

16/10/2018

Full Month Name Day, Year
MMMM dd, yyyy

Long format with full month name in Amharic

ሰኔ 16, 2018

Day of Week, Month Day Year
E, MMM dd yyyy

Abbreviated format with day of week

ማክ, ሰኔ 16 2018

Full Day of Week, Full Month Name Day, Year
EEE, MMMM dd, yyyy

Complete format with full day and month names

ማክሰኞ, ሰኔ 16, 2018

Date and Time
yyyy-MM-dd HH:mm:ss

Standard datetime format with 24-hour time

2018-10-16 17:17:12

Full Month Name Day, Year Hour:Minute:Second
MMMM dd, yyyy HH:mm:ss

Long datetime format with full month name

ሰኔ 16, 2018 17:17:12

API Reference

Complete reference for all components, hooks, and utilities in Et-Calendar.

DatePicker
Component

A component for selecting dates using Ethiopian or Gregorian calendars.

Props

selectedDate?
Date - Currently selected date
onDateChange
(date: Date) => void - Callback when the date changes
showCalendars
'ethiopian' | 'gregorian' | 'both' - Which calendars to display
viewFirst?
'Ethiopian' | 'Gregorian' - Initial tab (default: "Gregorian")
dateFormat?
string - Display format (time tokens ignored)
minDate? / maxDate?
Date - Bounds for selection and navigation
clampNavigation?
boolean - Prevent navigating outside min/max months/years
enforceInitialWithinRange?
boolean - Clamp initial selectedDate into min/max
closeOnSelect?
boolean - Close popover after selecting a date (default: true)
datePickerClassNames?
DatePickerClassNames - Styling hooks for trigger/panel/tabs
calanderClassNames?
CalendarClassNames - Styling hooks for the calendar grid
popoverProps?
PopoverProps - Popover positioning tweaks
ethiopianTabName? / gregorianTabName?
string - Custom tab labels
DateTimePicker
Component

A component for selecting both dates and times, supporting Ethiopian and Gregorian calendars.

Props

selectedDate?
Date - Currently selected date/time
onDateChange
(date: Date) => void - Callback on date/time change
showCalendars
'ethiopian' | 'gregorian' | 'both' - Which calendars to show
viewFirst?
'Ethiopian' | 'Gregorian' - Initial tab (default: "Gregorian")
dateFormat?
string - Display format for the date portion
timeFormat?
'12h' | '24h' - Time picker mode (default: "12h")
minDate? / maxDate?
Date - Bounds for selection and navigation
clampNavigation?
boolean - Prevent navigating outside min/max months/years
enforceInitialWithinRange?
boolean - Clamp initial selectedDate into min/max (default: true)
closeOnSelect?
boolean - Close popovers after picking a date and after picking minutes (and AM/PM)
datePickerClassNames?
DatePickerClassNames - Styling hooks for date trigger/panel/tabs
timePickerClassNames?
TimePickerClassNames - Styling hooks for the time picker
calanderClassNames?
CalendarClassNames - Styling hooks for the calendar grid
popoverProps?
PopoverProps - Popover positioning tweaks
ethiopianTabName? / gregorianTabName?
string - Custom tab labels