Question

I had a PHP function to convert Gregorian calendar to Jalali calendar. I converted a PHP function to this JavaScript function by an online converter but it shows me two errors while running.

Look at this code. It shows me two errors.

1- Uncaught SyntaxError: Unexpected identifier

2- Uncaught ReferenceError: gregorian_to_jalali is not defined

I can't find the problem.

<script>
//Function to convert Gregorian calendar to Jalili calendar to save it in the database.
function gregorian_to_jalali(g_y, g_m, g_d, mod) {
    if (typeof mod === "undefined") {
        mod = '';
    }

    var d_4 = g_y % 4;
    var g_a = {
        0: 0,
        1: 0,
        2: 31,
        3: 59,
        4: 90,
        5: 120,
        6: 151,
        7: 181,
        8: 212,
        9: 243,
        10: 273,
        11: 304,
        12: 334
    };
    var doy_g = g_a[g_m] + g_d;

    if (d_4 == 0 AND g_m > 2) {
        doy_g++;
    }

    var d_33 = (((g_y - 16) % 132) * .0305);
    var a = (d_33 == 3 OR d_33 < (d_4 - 1) OR d_4 == 0) ? 286 : 287;
    var b = ((d_33 == 1 OR d_33 == 2) AND(d_33 == d_4 OR d_4 == 1)) ? 78 : ((d_33 == 3 AND d_4 == 0) ? 80 : 79);

    if (((g_y - 10) / 63) == 30) {
        a--;
        b++;
    }

    if (doy_g > b) {
        var jy = g_y - 621;
        var doy_j = doy_g - b;
    } else {
        jy = g_y - 622;
        doy_j = doy_g + a;
    }

    if (doy_j < 187) {
        var jm = ((doy_j - 1) / 31);
        var jd = doy_j - (31 * jm++);
    } else {
        jm = ((doy_j - 187) / 30);
        jd = doy_j - 186 - (jm * 30);
        jm += 7;
    }

    return (mod == '') ? {
        0: jy,
        1: jm,
        2: jd
    } : jy + "" + mod + "" + jm + "" + mod + "" + jd;
}

Was it helpful?

Solution

You're using "AND" and "OR" instead of "&&" and "||" respectively. Here's your code:

function gregorian_to_jalali(g_y, g_m, g_d, mod) {
    if (typeof mod === "undefined") {
        mod = '';
    }

    var d_4 = g_y % 4;
    var g_a = {
        0: 0,
        1: 0,
        2: 31,
        3: 59,
        4: 90,
        5: 120,
        6: 151,
        7: 181,
        8: 212,
        9: 243,
        10: 273,
        11: 304,
        12: 334
    };
    var doy_g = g_a[g_m] + g_d;

    if (d_4 == 0 && g_m > 2) {
        doy_g++;
    }

    var d_33 = (((g_y - 16) % 132) * .0305);
    var a = (d_33 == 3 || d_33 < (d_4 - 1) || d_4 == 0) ? 286 : 287;
    var b = ((d_33 == 1 || d_33 == 2) &&(d_33 == d_4 || d_4 == 1)) ? 78 : ((d_33 == 3 && d_4 == 0) ? 80 : 79);

    if (((g_y - 10) / 63) == 30) {
        a--;
        b++;
    }

    if (doy_g > b) {
        var jy = g_y - 621;
        var doy_j = doy_g - b;
    } else {
        jy = g_y - 622;
        doy_j = doy_g + a;
    }

    if (doy_j < 187) {
        var jm = ((doy_j - 1) / 31);
        var jd = doy_j - (31 * jm++);
    } else {
        jm = ((doy_j - 187) / 30);
        jd = doy_j - 186 - (jm * 30);
        jm += 7;
    }

    return (mod == '') ? {
        0: jy,
        1: jm,
        2: jd
    } : jy + "" + mod + "" + jm + "" + mod + "" + jd;
}

alert(gregorian_to_jalali(2013, 1, 31)[0]); //returns 1391
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top