123 lines
3.0 KiB
JavaScript
123 lines
3.0 KiB
JavaScript
import jalaali from 'jalaali-js'
|
||
|
||
export function gregorianToJalaliString(isoString, separator = '/', persianDigits = false) {
|
||
if (!isoString) return ''
|
||
|
||
const match = isoString.match(/^(\d{4})-(\d{2})-(\d{2})/)
|
||
if (!match) return ''
|
||
|
||
const gy = Number.parseInt(match[1], 10)
|
||
const gm = Number.parseInt(match[2], 10)
|
||
const gd = Number.parseInt(match[3], 10)
|
||
|
||
try {
|
||
const jalali = jalaali.toJalaali(gy, gm, gd)
|
||
let jy = String(jalali.jy)
|
||
let jm = String(jalali.jm).padStart(2, '0')
|
||
let jd = String(jalali.jd).padStart(2, '0')
|
||
|
||
if (persianDigits) {
|
||
const enToFa = {
|
||
0: '۰',
|
||
1: '۱',
|
||
2: '۲',
|
||
3: '۳',
|
||
4: '۴',
|
||
5: '۵',
|
||
6: '۶',
|
||
7: '۷',
|
||
8: '۸',
|
||
9: '۹',
|
||
}
|
||
|
||
jy = jy.replace(/\d/g, (d) => enToFa[d])
|
||
jm = jm.replace(/\d/g, (d) => enToFa[d])
|
||
jd = jd.replace(/\d/g, (d) => enToFa[d])
|
||
}
|
||
return `${jy}${separator}${jm}${separator}${jd}`
|
||
} catch {
|
||
return ''
|
||
}
|
||
}
|
||
|
||
export function gregorianToJalaliStringLong(isoString, separator = '/', persianDigits = false) {
|
||
if (!isoString) return ''
|
||
|
||
const match = isoString.match(/^(\d{4})-(\d{2})-(\d{2})[\sT](\d{2}):(\d{2})/)
|
||
if (!match) return ''
|
||
|
||
const gy = Number.parseInt(match[1], 10)
|
||
const gm = Number.parseInt(match[2], 10)
|
||
const gd = Number.parseInt(match[3], 10)
|
||
const hour = match[4]
|
||
const minute = match[5]
|
||
|
||
try {
|
||
const jalali = jalaali.toJalaali(gy, gm, gd)
|
||
let jy = String(jalali.jy)
|
||
let jm = String(jalali.jm).padStart(2, '0')
|
||
let jd = String(jalali.jd).padStart(2, '0')
|
||
let hh = hour
|
||
let mm = minute
|
||
|
||
if (persianDigits) {
|
||
const enToFa = {
|
||
0: '۰',
|
||
1: '۱',
|
||
2: '۲',
|
||
3: '۳',
|
||
4: '۴',
|
||
5: '۵',
|
||
6: '۶',
|
||
7: '۷',
|
||
8: '۸',
|
||
9: '۹',
|
||
}
|
||
|
||
jy = jy.replace(/\d/g, (d) => enToFa[d])
|
||
jm = jm.replace(/\d/g, (d) => enToFa[d])
|
||
jd = jd.replace(/\d/g, (d) => enToFa[d])
|
||
hh = hh.replace(/\d/g, (d) => enToFa[d])
|
||
mm = mm.replace(/\d/g, (d) => enToFa[d])
|
||
}
|
||
|
||
return ` ${jy}${separator}${jm}${separator}${jd}، ${hh}:${mm}`
|
||
} catch {
|
||
return ''
|
||
}
|
||
}
|
||
|
||
export function JalaliToGregorianString(jalaliStr) {
|
||
try {
|
||
if (!jalaliStr) return null
|
||
const [jy, jm, jd] = jalaliStr.split('/').map(Number)
|
||
const greg = jalaali.toGregorian(jy, jm, jd)
|
||
return `${greg.gy}-${String(greg.gm).padStart(2, '0')}-${String(greg.gd).padStart(
|
||
2,
|
||
'0'
|
||
)}T00:00:00.000Z`
|
||
} catch {
|
||
return ''
|
||
}
|
||
}
|
||
|
||
export function JalaliToGregorianStringWithTime(jalaliDateTimeStr) {
|
||
try {
|
||
if (!jalaliDateTimeStr) return null
|
||
|
||
const parts = jalaliDateTimeStr.split(' ')
|
||
const datePart = parts[0]
|
||
const timePart = parts[1] || '00:00'
|
||
|
||
const [jy, jm, jd] = datePart.split('/').map(Number)
|
||
const greg = jalaali.toGregorian(jy, jm, jd)
|
||
|
||
return `${greg.gy}-${String(greg.gm).padStart(2, '0')}-${String(greg.gd).padStart(
|
||
2,
|
||
'0'
|
||
)}T${timePart}:00.000Z`
|
||
} catch {
|
||
return ''
|
||
}
|
||
}
|