مدیاویکی:Gadget-Date.js

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
/*
 * Added by [[User:Mjbmr]] for using for live weather and live Persian dates, etc.
*/

Date.wikinews = {};

Date.wikinews.gregorian_days_in_months = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

Date.wikinews.solar_months_names = {1:"فروردین",2:"اردیبهشت",3:"خرداد",4:"تیر",5:"مرداد",6:"شهریور",7:"مهر",8:"آبان",9:"آذر",10:"دی",11:"بهمن",12:"اسفند"};

Date.wikinews.gregorian_months_names = {1:"ژانویه",2:"فوریه",3:"مارس",4:"آوریل",5:"مه",6:"ژوئن",7:"ژوئیه",8:"اوت",9:"سپتامبر",10:"اکتبر",11:"نوامبر",12:"دسامبر"};

Date.wikinews.days_names = ["یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"];

Date.wikinews.solar_days_in_months = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);

Date.wikinews.div = function (a, b) {
    return Math.floor(a / b);
};

Date.wikinews.remainder = function (a, b) {
    return a - Math.floor(a / b) * b;
};

Date.wikinews.gregorian_to_solar = function (g) {
    var gy, gm, gd;
    var jy, jm, jd;
    var g_day_no, j_day_no;
    var j_np;
    var i;
    gy = g[0] - 1600;
    gm = g[1] - 1;
    gd = g[2] - 1;
    var div = Date.wikinews.div;
    var remainder = Date.wikinews.remainder;
    var g_days_in_month = Date.wikinews.gregorian_days_in_months;
    var j_days_in_month = Date.wikinews.solar_days_in_months;
    g_day_no = 365 * gy + div((gy + 3), 4) - div((gy + 99), 100) + div((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;
    j_day_no = g_day_no - 79;
    j_np = div(j_day_no, 12053);
    j_day_no = remainder(j_day_no, 12053);
    jy = 979 + 33 * j_np + 4 * div(j_day_no, 1461);
    j_day_no = remainder(j_day_no, 1461);
    if (j_day_no >= 366) {
        jy += div((j_day_no - 1), 365);
        j_day_no = remainder((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];
    }
    jm = i + 1;
    jd = j_day_no + 1;
    return new Array(jy, jm, jd);
};

Date.wikinews.solar_to_gregorian = function (j) {
    var gy, gm, gd;
    var jy, jm, jd;
    var g_day_no, j_day_no;
    var leap;
    var i;
    jy = j[0] - 979;
    jm = j[1] - 1;
    jd = j[2] - 1;
    var div = Date.wikinews.div;
    var remainder = Date.wikinews.remainder;
    var g_days_in_month = Date.wikinews.gregorian_days_in_months;
    var j_days_in_month = Date.wikinews.solar_days_in_months;
    j_day_no = 365 * jy + div(jy, 33) * 8 + div((remainder(jy, 33) + 3), 4);
    for (i = 0; i < jm; ++i)
        j_day_no += j_days_in_month[i];
    j_day_no += jd;
    g_day_no = j_day_no + 79;
    gy = 1600 + 400 * div(g_day_no, 146097);
    g_day_no = remainder(g_day_no, 146097);
    leap = 1;
    if (g_day_no >= 36525)
    {
        g_day_no--;
        gy += 100 * div(g_day_no, 36524);
        g_day_no = remainder(g_day_no, 36524);
        if (g_day_no >= 365)
            g_day_no++;
        else
            leap = 0;
    }
    gy += 4 * div(g_day_no, 1461);
    g_day_no = remainder(g_day_no, 1461);
    if (g_day_no >= 366) {
        leap = 0;
        g_day_no--;
        gy += div(g_day_no, 365);
        g_day_no = remainder(g_day_no, 365);
    }
    for (i = 0; g_day_no >= g_days_in_month[i] + (i == 1 && leap); i++)
        g_day_no -= g_days_in_month[i] + (i == 1 && leap);
    gm = i + 1;
    gd = g_day_no + 1;
    return new Array(gy, gm, gd);
};

Date.wikinews.localize_numbers = function (value) {
	value = value.toString();
	var numbers = "۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹".split(" ");
	for(var i = 0; i< 10; i++){
		value = value.replace(new RegExp(i, 'g'), numbers[i]);
	}
	return value;
}