PDA

View Full Version : سوال: نحوه تغییر تاریخ از میلادی به شمسی در اسکریپت



mohmmad6006
یک شنبه 23 اسفند 1388, 20:38 عصر
سلام

من یه اسکریپت دارم که با تاریخ میلادی کار میکنه

برای اینکه تاریخ رو به شمسی تغییر بدم چیکار باید بکنم؟

ممنون

mohmmad6006
دوشنبه 24 اسفند 1388, 11:29 صبح
سلام

من هر چی آموزش ها رو خوندم نتوسنتم مشکلمو حل کنم

من این کد رو تو اسکریپت پیدا کردم که مربوط به تاریخ هست



/*
Convert a date in SQL format (yyyy-mm-dd)
@param string date any date in any format
@return string date in format yyyy-mm-dd
*/
function convert_date_sql($date)
{
$return="";
if($date=="" OR $date=="00-00-0000" OR $date=="0000-00-00")
{
$return="";
}
elseif(eregi("([0-9]{4})([\/ .-]{1})([0-9]{1,2})([\/ .-]{1})([0-9]{1,2})", $date))
{
$return=eregi_replace("\/|\.| ","-",$date);
}
elseif(eregi("([0-9]{1,2})([\/ .-]{1})([0-9]{1,2})([\/ .-]{1})([0-9]{4})", $date))
{
$date=eregi_replace("\/|\.| ","-",$date);
$date=explode("-",$date);
$return=$date['2']."-".$date['1']."-".$date['0'];
}
else
{
$return="";
}
return $return;
}





/*
Return the date of the day according a specific format (same as function date())
@param string format define the format the date (refer to date() function)
@return string date of the day in format
*/
function date_day($format)
{
return date($format,time());
}


/*
Convert a SQL date to another format
@param date date date in sql format (yyyy-mm-dd)
@param string format refer to strftime function
@return string date converted in format
*/
function convert_date($date,$format) {
if($date=='0000-00-00 00:00:00' OR $date=='0000-00-00' OR $date=='' OR $date==NULL) {
return '';
}
else {
$year=substr($date,0,4);
if(phpversion() < 5.0 AND $year < 1970) {

$new_date=substr_replace($date,'1980',0,4); # we replace the year by a year after 1970
$new_format=eregi_replace('%a|%A|%u','',$format); # we remove days information from the format because they would be wrong
$new_date=strftime($new_format,strtotime($new_date )); # we convert the date
$new_date=eregi_replace('1980',$year,$new_date); # we put back the real year
return $new_date;
}
else {
return strftime($format,strtotime($date));
}
}
}


/*
Calculate the age in year from a date of birth ( format yyyy-mm-dd)
@param string dob date of birth in yyyy-mm-dd format
@return int age in years from today
*/
function calcul_age($dob)
{
$year_day=date("Y",time());
$month_day=date("m",time());
$day_day=date("d",time());

$year_nais = substr($dob, 0, 4);
$month_nais = substr($dob, 3, 2);
$day_nais = substr($dob, 9, 2);

$age = $year_day-$year_nais;

if($month_day < $month_nais) {$age=$age--;}
elseif($day_day < $day_nais && $month_day==$month_nais) { $age=$age--; }

return $age;
}



حالا من باید چیکار کنم تا تاریخ به شمسی نشون بده؟

birangi
دوشنبه 24 اسفند 1388, 14:00 عصر
من هم نیاز دارم. اگه یکی جواب بده ممنون میشم

ArtMiz
سه شنبه 25 اسفند 1388, 04:21 صبح
با این کدها ببین مشکلت حل میشه
دو تا تابع زیر دو تا خروجی میدن از این فایل ها
get_jalali_date();
get_jalali();

birangi
دوشنبه 02 فروردین 1389, 02:23 صبح
کد زیاد هست ، ولی باید چجوری ازشون استفاده کرد؟ در خود اسکریپت ؟

mojtabadj
یک شنبه 08 فروردین 1389, 09:55 صبح
سلام

من یه اسکریپت دارم که با تاریخ میلادی کار میکنه

برای اینکه تاریخ رو به شمسی تغییر بدم چیکار باید بکنم؟

ممنون

اینم تابعی که میخوای



function getfarsidate()
{
$today = getdate();
$month =$today['mon'];
$mday = $today['mday'];
$year = $today['year'];
$r=gregorian_to_jalali( $year,$month,$mday);
$mon=$r[1];
if(strlen($mon)<2){$mon='0'.$mon;}
$day=$r[2];
if(strlen($day)<2){$day='0'.$day;}
$dat=$r[0]."/".$mon."/".$day;
return $dat;
}



اینم کد اصلی



function gregorian_to_jalali ($g_y, $g_m, $g_d)
{
$g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
$gy = $g_y-1600;
$gm = $g_m-1;
$gd = $g_d-1;
$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)))
/* leap and after Feb */
$g_day_no++;
$g_day_no += $gd;
$j_day_no = $g_day_no-79;
$j_np = div($j_day_no, 12053); /* 12053 = 365*33 + 32/4 */
$j_day_no = $j_day_no % 12053;
$jy = 979+33*$j_np+4*div($j_day_no,1461); /* 1461 = 365*4 + 4/4 */
$j_day_no %= 1461;
if ($j_day_no >= 366) {
$jy += div($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];
$jm = $i+1;
$jd = $j_day_no+1;
return array($jy, $jm, $jd);
}

function jalali_to_gregorian($j_y, $j_m, $j_d)
{
$g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
$jy = $j_y-979;
$jm = $j_m-1;
$jd = $j_d-1;
$j_day_no = 365*$jy + div($jy, 33)*8 + div($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); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
$g_day_no = $g_day_no % 146097;
$leap = true;
if ($g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
{
$g_day_no--;
$gy += 100*div($g_day_no, 36524); /* 36524 = 365*100 + 100/4 - 100/100 */
$g_day_no = $g_day_no % 36524;
if ($g_day_no >= 365)
$g_day_no++;
else
$leap = false;
}
$gy += 4*div($g_day_no, 1461); /* 1461 = 365*4 + 4/4 */
$g_day_no %= 1461;
if ($g_day_no >= 366) {
$leap = false;
$g_day_no--;
$gy += div($g_day_no, 365);
$g_day_no = $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 array($gy, $gm, $gd);
}
//================================================== =============================