کد تاریخ و زمان در انجمن های Phpbb

سلام
توی انجمن های phpbb یه ماژول هست برای نمایش ساعت و تاریخ
حالا این ساعت و تاریخ می تونه ساعت و تاریخ فعلی ، ساعت و تاریخ ارسال موضوعات و ... باشه
چیزی که هست اینه که در این قسمت کد هایی هستن که داده ای شامل 14 کاراکتر عددی را با فرمت TIMESTAMP از دیتا بیس خونده و اون رو به فرمتی مثل « 13 فروردين 1385 - 15:53 » تبدیل می کنند
این عملیات تبدیل شامل تبدیل تاریخ از میلادی به شمسی و برگرداندن نام ماه به جای شماره ماه ، تبدیل ساعت از ساعت UTC به ساعت محلی کاربر (که در پروفایل ذخیره شده) هست
چیزی که من دنبالشم کد یا الگوریتم انجام این تبدیلات هست
اگه کسی این کد رو داره یا می دونه توی چه فایلی و کجا می تونم این کد رو پیدا کنم ممنون میشم اگه بگه
 

Hyper

Active Member
هرچه هست در فایل functions.php هست

این کد رو ببینید :

کد:
//
// Create date/time from format and timezone
//
function create_date($format, $gmepoch, $tz)
{
	global $board_config, $lang;
	static $translate;

	if ( empty($translate) && $board_config['default_lang'] != 'english' )
	{
		@reset($lang['datetime']);
		while ( list($match, $replace) = @each($lang['datetime']) )
		{
			$translate[$match] = $replace;
		}
	}

	return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
}
رضا
 

javad_hosseiny

New Member
کافی است تا تابع create_date موجود در فایل functions.php موجود در شاخه include را به صورت ذیل تغییر دهید.

نهایتا کلیه تاریخ ها و ساعتها با توجه به حالت شمسی و تغییر gmt نمایش داده می شود.

کد:
//
// Create date/time from format and timezone
//
// mehdi 2
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);

$div = create_function('$a,$b','return (int) ($a / $b);');

$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);

$div = create_function('$a,$b','return (int) ($a / $b);');

$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);
}


//
// Create date/time from format and timezone
//
function create_date($format, $gmepoch, $tz)
{
	global $board_config, $lang;
	static $translate;

	if ( empty($translate) && $board_config['default_lang'] != 'english' )
	{
		@reset($lang['datetime']);
		while ( list($match, $replace) = @each($lang['datetime']) )
		{
			$translate[$match] = $replace;
		}
	}

	//return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));

if ($format==$board_config['default_dateformat']){

//   $tempdate= gmdate("l|j|n|Y| - G:i", $gmepoch + (3600 * $tz));
   $tempdate= gmdate("|j|n|Y| - G:i", $gmepoch + (3600 * $tz));
   $temparray= explode ('|', $tempdate);
   $jalali=gregorian_to_jalali( $temparray[3],$temparray[2],$temparray[1]);
   $trans= array("1"=>"ÝÑæÑÏíä","2"=>"ÇÑÏíÈåÔÊ","3"=>"ÎÑÏÇÏ","4"=>"ÊíÑ","5"=>"ãÑÏÇÏ","6"=>"ÔåÑíæÑ","7"=>"ãåÑ","8"=>"ÂÈÇä","9"=>"ÂÐÑ","10"=>"Ïí","11"=>"Èåãä","12"=>"ÇÓÝäÏ");
   $jalali[1]=strtr ($jalali[1], $trans);
   $finaldate= $temparray[0]." ".$jalali[2]." ".$jalali[1]." ".$jalali[0].$temparray[4];
   return ( !empty($translate) ) ? strtr($finaldate, $translate) : $finaldate;
} else if ($format==$lang['DATE_FORMAT']){
//   $tempdate= gmdate("l|j|n|Y| - G:i", $gmepoch + (3600 * $tz));
   $tempdate= gmdate("|j|n|Y| - G:i", $gmepoch + (3600 * $tz));
   $temparray= explode ('|', $tempdate);
   $jalali=gregorian_to_jalali( $temparray[3],$temparray[2],$temparray[1]);
   $trans= array("1"=>"ÝÑæÑÏíä","2"=>"ÇÑÏíÈåÔÊ","3"=>"ÎÑÏÇÏ","4"=>"ÊíÑ","5"=>"ãÑÏÇÏ","6"=>"ÔåÑíæÑ","7"=>"ãåÑ","8"=>"ÂÈÇä","9"=>"ÂÐÑ","10"=>"Ïí","11"=>"Èåãä","12"=>"ÇÓÝäÏ");
   $jalali[1]=strtr ($jalali[1], $trans);
   $finaldate= $jalali[2]." ".$jalali[1]." ".$jalali[0];
   return $finaldate;
//else {
//mehdi
//   return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
   }
}

//
// Pagination routine, generates
// page number sequence
//
 

جدیدترین ارسال ها

بالا