Skip to content

Commit 068863a

Browse files
committed
Add Kurdish weekday support to date conversion and formatting
Introduces a Weekday field to KurdishDate, mapping Go's time.Weekday to Kurdish weekdays (1=Saturday, ..., 7=Friday). Adds Kurdish weekday names, updates formatting to support weekday output, and extends tests to cover the new Weekday field.
1 parent 342c9d3 commit 068863a

5 files changed

Lines changed: 58 additions & 12 deletions

File tree

conversions.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,18 @@ func solarHijriToGregorian(sYear, sMonth, sDay int) (gYear, gMonth, gDay int) {
3232
type Month int
3333

3434
const (
35-
Farvardin Month = 1 + iota
36-
Ordibehesht
37-
Khordad
38-
Tir
39-
Mordad
40-
Shahrivar
41-
Mehr
42-
Aban
43-
Azar
44-
Dey
45-
Bahman
46-
Esfand
35+
Khakelive Month = 1 + iota // خاکه‌لێوه
36+
Gulan // گوڵان
37+
Jozherdan // جۆزه‌ردان
38+
Pushper // پووشپه‌ڕ
39+
Gelavizh // گه‌لاوێژ
40+
Khereman // خه‌رمانان
41+
Rezber // ره‌زبه‌ر
42+
Khezhelwer // خه‌زه‌ڵوه‌ر
43+
Sermavez // سه‌رماوه‌ز
44+
Befranbar // به‌فرانبار
45+
Ribendan // رێبه‌ندان
46+
Resheme // ره‌شه‌مێ
4747
)
4848

4949
// toJalaali converts Gregorian to Jalaali date.

dialects.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
package kurdical
22

3+
// WeekdayNames holds the weekday names for Kurdish (same for all dialects).
4+
var WeekdayNames = []string{
5+
"", // 0 not used
6+
"شەممە", // Saturday
7+
"یەکشەممە", // Sunday
8+
"دووشەممە", // Monday
9+
"سێشەممە", // Tuesday
10+
"چوارشەممە", // Wednesday
11+
"پێنجشەممە", // Thursday
12+
"هەینی", // Friday
13+
}
14+
315
// monthNames holds the month names for each Kurdish dialect.
416
var monthNames = map[Dialect][]string{
517
Laki: {

format.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ func (k KurdishDate) kAppendFormat(b []byte, layout string) ([]byte, error) {
9797
b = appendInt(b, month, 0)
9898
case stdZeroMonth:
9999
b = appendInt(b, month, 2)
100+
case stdWeekDay, stdLongWeekDay:
101+
if k.Weekday >= 1 && k.Weekday <= 7 {
102+
b = append(b, []byte(WeekdayNames[k.Weekday])...)
103+
}
100104
case stdDay:
101105
b = appendInt(b, day, 0)
102106
case stdUnderDay:

kurdical.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type KurdishDate struct {
3535
Year int
3636
Month int
3737
Day int
38+
Weekday int // 1=Saturday, 2=Sunday, ..., 7=Friday
3839
MonthName string
3940
Dialect Dialect
4041
Epoch Epoch
@@ -52,10 +53,31 @@ func GregorianToKurdish(t time.Time, dialect Dialect, epoch Epoch) KurdishDate {
5253
sYear, sMonth, sDay := gregorianToSolarHijri(year, int(month), day)
5354
kYear := sYear + epochOffsets[epoch]
5455
monthName := monthNames[dialect][sMonth-1]
56+
57+
// Calculate Kurdish weekday: 1=Saturday, 2=Sunday, ..., 7=Friday
58+
weekday := int(t.Weekday())
59+
switch weekday {
60+
case 0: // Sunday
61+
weekday = 2
62+
case 1: // Monday
63+
weekday = 3
64+
case 2: // Tuesday
65+
weekday = 4
66+
case 3: // Wednesday
67+
weekday = 5
68+
case 4: // Thursday
69+
weekday = 6
70+
case 5: // Friday
71+
weekday = 7
72+
case 6: // Saturday
73+
weekday = 1
74+
}
75+
5576
return KurdishDate{
5677
Year: kYear,
5778
Month: sMonth,
5879
Day: sDay,
80+
Weekday: weekday,
5981
MonthName: monthName,
6082
Dialect: dialect,
6183
Epoch: epoch,

kurdical_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func TestGregorianToKurdish(t *testing.T) {
2323
Year: 2723,
2424
Month: 1,
2525
Day: 1,
26+
Weekday: 4, // Tuesday
2627
MonthName: "خاکه‌لێوه",
2728
Dialect: Sorani,
2829
Epoch: MedianKingdom,
@@ -38,6 +39,7 @@ func TestGregorianToKurdish(t *testing.T) {
3839
Year: 2635,
3940
Month: 1,
4041
Day: 1,
42+
Weekday: 4,
4143
MonthName: "نیسان",
4244
Dialect: Kurmanji,
4345
Epoch: FallOfNineveh,
@@ -53,6 +55,7 @@ func TestGregorianToKurdish(t *testing.T) {
5355
Year: 2723,
5456
Month: 1,
5557
Day: 1,
58+
Weekday: 4,
5659
MonthName: "په‌نجه",
5760
Dialect: Laki,
5861
Epoch: MedianKingdom,
@@ -68,6 +71,7 @@ func TestGregorianToKurdish(t *testing.T) {
6871
Year: 2723,
6972
Month: 1,
7073
Day: 1,
74+
Weekday: 4,
7175
MonthName: "نه‌ورۆز",
7276
Dialect: Hawrami,
7377
Epoch: MedianKingdom,
@@ -83,6 +87,7 @@ func TestGregorianToKurdish(t *testing.T) {
8387
Year: 2723,
8488
Month: 1,
8589
Day: 1,
90+
Weekday: 4,
8691
MonthName: "جه‌ژنان (جه‌شنان)",
8792
Dialect: Kalhuri,
8893
Epoch: MedianKingdom,
@@ -98,6 +103,7 @@ func TestGregorianToKurdish(t *testing.T) {
98103
Year: 2722,
99104
Month: 10,
100105
Day: 11,
106+
Weekday: 2,
101107
MonthName: "به‌فرانبار",
102108
Dialect: Sorani,
103109
Epoch: MedianKingdom,
@@ -113,6 +119,7 @@ func TestGregorianToKurdish(t *testing.T) {
113119
Year: 2723,
114120
Month: 10,
115121
Day: 10,
122+
Weekday: 2,
116123
MonthName: "به‌فرانبار",
117124
Dialect: Sorani,
118125
Epoch: MedianKingdom,
@@ -145,6 +152,7 @@ func TestKurdishToGregorian(t *testing.T) {
145152
Year: 2723,
146153
Month: 1,
147154
Day: 1,
155+
Weekday: 4,
148156
Dialect: Sorani,
149157
Epoch: MedianKingdom,
150158
},

0 commit comments

Comments
 (0)