ايران ويج

نسخه‌ی کامل: تبدیل تاریخ میلادی به خورشیدی در mysql
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
امروزه اینترنت و وب جایگاه خودشو تو زندگی و کسب و کار باز کرده که وب پارسی هم از این قاعده مستثنی نیست یکی از عوامل مهم در وب پارسی استفاده از تاریخ خورشیدی میباشد روشهای مختلفی برای تبدیل تاریخ خورشیدی وجود دارد استفاده از اسکریپتهای تبدیل تاریخ مثل جلالی یا پارسی دیت یا نوشتن یک تابع در سطح بانک داده و استفاده از آن

کد زیر یک تابع برای تبدیل تاریخ در mysql + فورمت بندی آن میباشد

کد:
CREATE DEFINER=`eleroboc_s8em4l0`@`localhost` FUNCTION `persian_date`(g_date date,outs varchar(10)) RETURNS varchar(20) CHARSET latin1
BEGIN
declare g_year int;
declare p_month varchar(2);
declare g_day int;
declare leap int;
declare pdate varchar(10);

set g_year=YEAR(g_date);
set g_day=DAYOFYEAR(g_date);

if g_day>79 then
    set g_day=g_day-79;
    set g_year=g_year-621;
else
    set leap=(g_year-1)%4;
    set g_year=g_year-622;
    if leap=0 then
        set g_day=g_day+287;
    else
        set g_day=g_day+286;
    end if;
END IF;

if leap=0 and g_day=366 then
set p_month=12;
set g_day=30;
else
case
when g_day>0 and g_day<32 then
    set p_month='01';
when g_day>31 and g_day<63 then
    set p_month='02';
    set g_day=g_day-31;
when g_day>62 and g_day<94 then
    set p_month='03';
    set g_day=g_day-62;
when g_day>93 and g_day<125 then
    set p_month='04';
    set g_day=g_day-93;
when g_day>124 and g_day<156 then
    set p_month='05';
    set g_day=g_day-124;
when g_day>155 and g_day<187 then
    set p_month='06';
    set g_day=g_day-155;
when g_day>186 and g_day<217 then
    set p_month='07';
    set g_day=g_day-186;
when g_day>216 and g_day<247 then
    set p_month='08';
    set g_day=g_day-216;
when g_day>246 and g_day<277 then
    set p_month='09';
    set g_day=g_day-246;
when g_day>276 and g_day<307 then
    set p_month='10';
    set g_day=g_day-276;
when g_day>306 and g_day<337 then
    set p_month='11';
    set g_day=g_day-306;
when g_day>336 then
    set p_month='12';
    set g_day=g_day-336;
end case;
end if;

set outs=REPLACE(outs,'y',g_year);
set outs=REPLACE(outs,'m',p_month);
set outs=REPLACE(outs,'d',g_day);

RETURN outs;
END$$

روش استفاده

کد:
select persian_date(my_date,'y-m-d')as date from my_table
در اینجا
my_date :اسم ستونی از نوع Date که میخواهید انرا به تاریخ خورشیدی تبدیل کنید
my_table:نام جدول مورد نظر
دستتون درد نکنه ، مدت ها دنبال همین قطعه کد بودم
(۱۱-آذر-۱۳۹۲, ۲۰:۴۰:۲۵)lord_viper نوشته است: [ -> ]امروزه اینترنت و وب جایگاه خودشو تو زندگی و کسب و کار باز کرده که وب پارسی هم از این قاعده مستثنی نیست یکی از عوامل مهم در وب پارسی استفاده از تاریخ خورشیدی میباشد روشهای مختلفی برای تبدیل تاریخ خورشیدی وجود دارد استفاده از اسکریپتهای تبدیل تاریخ مثل جلالی یا پارسی دیت یا نوشتن یک تابع در سطح بانک داده و استفاده از آن

کد زیر یک تابع برای تبدیل تاریخ در mysql + فورمت بندی آن میباشد

کد:
CREATE DEFINER=`eleroboc_s8em4l0`@`localhost` FUNCTION `persian_date`(g_date date,outs varchar(10)) RETURNS varchar(20) CHARSET latin1
BEGIN
declare g_year int;
declare p_month varchar(2);
declare g_day int;
declare leap int;
declare pdate varchar(10);

set g_year=YEAR(g_date);
set g_day=DAYOFYEAR(g_date);

if g_day>79 then
    set g_day=g_day-79;
    set g_year=g_year-621;
else
    set leap=(g_year-1)%4;
    set g_year=g_year-622;
    if leap=0 then
        set g_day=g_day+287;
    else
        set g_day=g_day+286;
    end if;
END IF;

if leap=0 and g_day=366 then
set p_month=12;
set g_day=30;
else
case
when g_day>0 and g_day<32 then
    set p_month='01';
when g_day>31 and g_day<63 then
    set p_month='02';
    set g_day=g_day-31;
when g_day>62 and g_day<94 then
    set p_month='03';
    set g_day=g_day-62;
when g_day>93 and g_day<125 then
    set p_month='04';
    set g_day=g_day-93;
when g_day>124 and g_day<156 then
    set p_month='05';
    set g_day=g_day-124;
when g_day>155 and g_day<187 then
    set p_month='06';
    set g_day=g_day-155;
when g_day>186 and g_day<217 then
    set p_month='07';
    set g_day=g_day-186;
when g_day>216 and g_day<247 then
    set p_month='08';
    set g_day=g_day-216;
when g_day>246 and g_day<277 then
    set p_month='09';
    set g_day=g_day-246;
when g_day>276 and g_day<307 then
    set p_month='10';
    set g_day=g_day-276;
when g_day>306 and g_day<337 then
    set p_month='11';
    set g_day=g_day-306;
when g_day>336 then
    set p_month='12';
    set g_day=g_day-336;
end case;
end if;

set outs=REPLACE(outs,'y',g_year);
set outs=REPLACE(outs,'m',p_month);
set outs=REPLACE(outs,'d',g_day);

RETURN outs;
END$$

روش استفاده

کد:
select persian_date(my_date,'y-m-d')as date from my_table
در اینجا
my_date :اسم ستونی از نوع Date که میخواهید انرا به تاریخ خورشیدی تبدیل کنید
my_table:نام جدول مورد نظر

سلام خیلی ممنونم از راهنماییتون اگر امکانش هست تو موضوع های مرتبط هم اموزش هایی قرار بدین.