Skip to content

Instantly share code, notes, and snippets.

@zumoshi
Last active August 29, 2015 14:04
Show Gist options
  • Select an option

  • Save zumoshi/8d4e3d433fb0f068ca8c to your computer and use it in GitHub Desktop.

Select an option

Save zumoshi/8d4e3d433fb0f068ca8c to your computer and use it in GitHub Desktop.
/**
* Algoritm from : https://gist.github.com/reza-farhadian/9807316
* Georgian To Jalali Programming Algorithm
* By Reza Farhadian <[email protected]>
*/
function g2j(timestamp){
// G = ~~(Georgian)
// J = ~~(Jalali)
var G_Y = ~~(new Date(timestamp*1000).getFullYear())
var G_M = ~~(new Date(timestamp*1000).getMonth())
var G_D = ~~(new Date(timestamp*1000).getDate())
var G_DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
var J_DAYS_IN_MONTH = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
var GY = ~~(G_Y - 1600)
var GM = ~~(G_M - 1)
var GD = ~~(G_D - 1)
var G_DAY_NO = ~~(365 * GY + ((GY + 3) / 4) - ((GY + 99) / 100) + ((GY + 399) / 400))
for (var i =0 ;i < GM ;++i)
{G_DAY_NO += G_DAYS_IN_MONTH[i]}
if (GM < 1 && ((GY % 4 === 0 && GY % 100 != 0) || (GY % 400 == 0)))
G_DAY_NO++
G_DAY_NO += GD
var J_DAY_NO = ~~(G_DAY_NO - 79)
var J_NP = ~~(J_DAY_NO / 12053)
J_DAY_NO = ~~(J_DAY_NO % 12053)
var JY = ~~(979 + 33 * J_NP + 4 * (J_DAY_NO / 1461))
J_DAY_NO %= 1461
if (J_DAY_NO >= 366)
{JY += (J_DAY_NO - 1) / 365
J_DAY_NO = ~~((J_DAY_NO - 1) % 365)}
for (i = 0;i < 11 && J_DAY_NO >= J_DAYS_IN_MONTH[i] ;++i)
{J_DAY_NO -= J_DAYS_IN_MONTH[i]}
var JM = ~~(i+1)
var JD = ~~(J_DAY_NO+1)
// JY => Jalali Year
// JM => Jalali Month
// JD => Jalali Day
return ~~JY+'/'+JM+'/'+~~JD
}
/**
* Georgian To Jalali Programming Algorithm
* By Reza Farhadian <[email protected]>
*/
// G = Georgian
// J = Jalali
[Int] G_Y = // A simple Georgian year
[Int] G_M = // A simple Georgian month
[Int] G_D = // A simple Georgian day
[Array] G_DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
[Array] J_DAYS_IN_MONTH = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
[Int] GY = G_Y - 1600
[Int] GM = G_M - 1
[Int] GD = G_D - 1
[Int] G_DAY_NO = 365 * GY + ((GY + 3) / 4) - ((GY + 99) / 100) + ((GY + 399) / 400);
for (i = 0; i < GM; ++i)
G_DAY_NO += G_DAYS_IN_MONTH[i]
if (GM < 1 && ((GY % 4 === 0 && GY % 100 != 0) || (GY % 400 == 0)))
G_DAY_NO++
G_DAY_NO += GD
[Int] J_DAY_NO = G_DAY_NO - 79
[Int] J_NP = J_DAY_NO / 12053
J_DAY_NO = J_DAY_NO % 12053
[Int] JY = 979 + 33 * J_NP + 4 * (J_DAY_NO / 1461)
J_DAY_NO %= 1461;
if (J_DAY_NO >= 366)
JY += (J_DAY_NO - 1) / 365
J_DAY_NO = (J_DAY_NO - 1) % 365
for (i = 0; i < 11 && J_DAY_NO >= J_DAYS_IN_MONTH[i]; ++i)
J_DAY_NO -= J_DAYS_IN_MONTH[i];
[Int] JM = i+1;
[Int] JD = J_DAY_NO+1;
// JY => Jalali Year
// JM => Jalali Month
// JD => Jalali Day
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment