PDA

View Full Version : راهنمایی برای دریافت تاریخ میلادی از دیتابیش و تبدیل به تاریخ شمسی



mrm109
جمعه 09 مهر 1389, 20:26 عصر
سلام
دوستان من کدی نوشتم که تاریخ های میلادی با این فرمت (Friday 1st of October 2010 12:22:23 PM) رو به تاریخ شمسی تبدیل کنه.این کد رو در صفحه ای جدا (jdata.php) نوشتم.

ضمنا تاریخ ها رو با فرمت بالا در دیتابیسم ذخیره کردم.

حالا میخام تاریخ رکوردهارو از دیتابیس بگیرم به شمسی تبدیل کنم بعد نمایش بدم
باید چکار کنم؟ با چه کدی تو url پاسش بدم؟ اصلا این کارو باید بکنم؟
نمی دونم چرا خنگ شدم :افسرده::افسرده:

snail22
جمعه 09 مهر 1389, 21:01 عصر
به نظر من بهتره که تاریخ رو به صورت timestamp تو دیتابیس ذخیره کنی یعنی مقداری که تابع time() بهت میده، اینطوری بعدا قدرت مانور بیشتری می‌تونی داشته باشی

برای تبدیل به تاریخ شمسی می‌توتی از این تابع استفاده بکنی



function fnum($num)
{
$nums = array('٠','١','٢','٣','۴','۵','۶','٧','٨' ,'٩');
$num = (string) $num;
$n = array();
for($i=0;$i<strlen($num);$i++)
{
$n[$i] = $nums[(int) $num[$i]];
}
return join('',$n);
}
$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);
function gregorian_to_jalali($g_y, $g_m, $g_d)
{
global $g_days_in_month;
global $j_days_in_month;

$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)))
$g_day_no++;
$g_day_no += $gd;

$j_day_no = $g_day_no-79;

$j_np = $div($j_day_no, 12053);
$j_day_no = $j_day_no % 12053;

$jy = 979+33*$j_np+4*$div($j_day_no,1461);

$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 persiandate($time)
{
@$a=gregorian_to_jalali(date('Y',$time),date('m',$ time),date('d',$time));
return fnum($a[0]).'/'.fnum($a[1]).'/'.fnum($a[2]);
}

funpatogh
جمعه 09 مهر 1389, 21:02 عصر
از تابع جلالی استفاده کن که توی انجمن هم نمونه هست jdate();
اگر به صورت timestamp() ذخیره میکردی کارت راحت تر بود

mrm109
جمعه 09 مهر 1389, 21:17 عصر
ممنون از پاسخ هاتون
ولی من گفتم که کد تبدیل تاریخ رو نوشتم
این هم نمونش:
روی این لینک کلیک کنید
http://www.tehranartgallery.com/jdate.php?gdate=Tuesday%2026th%20of%20July%202010% 2003:13:49%20PM

مشکلم اینه که چجوری تاریخ هارو به این صفحه پاس بدم که تبدیل انجام بشه و بعدش در صفحه وب سایتم نمایش داده بشه

funpatogh
جمعه 09 مهر 1389, 21:38 عصر
شما توی فایل jdate.php برنامه ای که نوشتی رو به صورت فانکشن در بیار بعد این فایل رو توی برنامت include کن و هر جا که نیاز داشتی فانکشن رو با آرگومان تاریخ مورد نظرت صدا بزن

snail22
جمعه 09 مهر 1389, 21:49 عصر
منظورت رو از پاس دادن نفهمیدم الان تو تاریخ رو به url فرستادی دیگه!

برای اون کار هم که می خوای بکنی که از تو آدرس بیاری هم می ‌تونی از AJAX استفاده کنی
هم می تونی با php



file_get_contents('http://www.tehranartgallery.com/jdate.php?gdate=Tuesday%2026th%20of%20July%202010% 2003:13:49%20PM');

mrm109
جمعه 09 مهر 1389, 22:32 عصر
منظورت رو از پاس دادن نفهمیدم الان تو تاریخ رو به url فرستادی دیگه!

برای اون کار هم که می خوای بکنی که از تو آدرس بیاری هم می ‌تونی از AJAX استفاده کنی
هم می تونی با php



file_get_contents('http://www.tehranartgallery.com/jdate.php?gdate=Tuesday%2026th%20of%20July%202010% 2003:13:49%20PM');


پاس دادنو خودم ساختم شاید فراخوندن بهتر باشه
منم دقیقا دنبال چنین دستوری در php هستم. قبلا اجراش کردم ولی این خطا رو میده:

Warning: file_get_contents(jdate.php?gdate=Tuesday%2026th%2 0of%20July%202010%2003:13:49%20PM) [function.file-get-contents (http://www.tehranartgallery.com/function.file-get-contents)]: failed to open stream: No such file or directory in /home/tehrana1/public_html/details.php on line 501

mrm109
جمعه 09 مهر 1389, 22:40 عصر
شما توی فایل jdate.php برنامه ای که نوشتی رو به صورت فانکشن در بیار بعد این فایل رو توی برنامت include کن و هر جا که نیاز داشتی فانکشن رو با آرگومان تاریخ مورد نظرت صدا بزن

این کارو انجام دادم قبلا
تاریخ اولین رکورد رو تبدیل میکنه
بقیه رکوردهامو دیگه نمیاره و این خطارو میده

Fatal error: Cannot redeclare monthnum() (previously declared in /home/tehrana1/public_html/jdate.php:15) in /home/tehrana1/public_html/jdate.php on line 15

snail22
جمعه 09 مهر 1389, 23:08 عصر
آره یادم اومد! تابع file_get_contents نمی‌تونه متغییر هارو ارجا بده

من تنها راهی که به ذهنم میرسه استفاده از socket هست

funpatogh
شنبه 10 مهر 1389, 00:08 صبح
به نظر بنده کاربردی ترین راه همون که گفتم هست اینجوری که میخواهید استفاده کنید لغمه دور سر چرخاندن هست

mrm109
شنبه 10 مهر 1389, 01:55 صبح
به نظر بنده کاربردی ترین راه همون که گفتم هست اینجوری که میخواهید استفاده کنید لغمه دور سر چرخاندن هست

ممنون دوست عزیز ؛ بالاخره از طریق فانکشن تونستم مشکلمو حل کنید
مرسی از راهنماییت