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

سلام. باز هم 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) است که متاسفانه بعضی از آن استفاده می‌کنند و حتی تاریخ شمسی را هم به صورت رشته ذخیره می‌کنند!

خب خوشبختانه اینجا من و 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
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();
?>
  1. بیان دیدگاه

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: