تبدیل تاریخ استاندارد MySql به فرمت دلخواه

RainDigital

Member
سلام. باز هم Snippet جدیدی نوشتم! اما در آن حد پیچیده نبود که تبدیل به کلاس شود و در PHPClasses بالاگذاری کنم.

دیتابیس پرووایدر MySql نوع داده‌ای دارد به اسم DateTime که با فرمتی استاندارد تاریخ و ساعت را ذخیره می‌کند. یکی از مزیت‌های روش استاندارد MySql، این است که می‌توان بجای محاسبه تاریخ و ساعت به کمک تابع Date، از توابع SQL استفاده کرد:

کد:
INSERT INTO `table` ( `id` , `time date` ) VALUES ( NULL , NOW() );
با استفاده از تابع NOW، هسته‌ی MySql تاریخ و زمان را به فرمت استاندارد محاسبه و ذخیره می‌کند. مثلا:

کد:
2010-08-14 14:19:21
خب شاید این روش ذخیره تاریخ، روش دلخواه برنامه نویس نباشد، ولی باید استاندارد ها را رعایت کرد. یک راه غلط ذخیره تاریخ به صورت رشته در دادگان(DataBase) است که متاسفانه بعضی از آن استفاده می‌کنند و حتی تاریخ شمسی را هم به صورت رشته ذخیره می‌کنند!:green:

خب خوشبختانه اینجا من و PHP به کمک شما می‌شتابیم:oops: و تابعی (که هنوز هم جای بهبود دارد-دیشب در خواب روش بهبودش را دیدم! اما الان یادم نمی‌آید) را قرار می‌دهیم برای این کار::rose:
PHP:
/* Analyses time-date and returns mktime!*/
function analyse_time_date($tdstr)
{
	// tdstr : 2010-08-12 11:41:14
	//         0000000000111111111
	//         0123456789012345678
	$year   = (int)substr($tdstr,0,4);
	$month  = (int)substr($tdstr,5,2);
	$day    = (int)substr($tdstr,8,2);
	
	$hour   = (int)substr($tdstr,11,2);
	$minute = (int)substr($tdstr,14,2);
	$second = (int)substr($tdstr,17,2);
	
	return mktime($hour,$minute,$second,$month,$day,$year);
}

/* Changes The MYSQL standard time format to ideal time/date format */
function format_time_date($tdstr,$format,$jalali=true)
{
	if($jalali && function_exists('jdate'))
		return jdate($format,analyse_time_date($tdstr));
	else
		return date($format,analyse_time_date($tdstr));
}
تابع analyse_time_date ساعت و تاریخ استاندارد را می‌گیرد و با mktime آن را به تعدا ثانیه‌های گذشته از زمان مبدا PHP تبدیل می‌کند. حالا این عدد را با تابع format_time_date می‌توان به فرمت دلخواه در آورد.

مثال:
PHP:
<?php
require 'formattimedate.php';

// make connection to mysql
// .
// .
// .

$queryID = mysql_query('SELECT * FROM `post` WHERE `id` = 50 LIMIT 1;');
$info = mysql_fetch_array($queryID);

$time_date = format_time_date($info['time date'] , 'F j, Y H:i');

echo 'The post ' , $info['post title'] , ' has been sent in ' , $time_date , ' .';

unset($queryID,$info,$time_date);
exit();
?>
 

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

بالا