PDA

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



arashmanteghi
یک شنبه 13 شهریور 1390, 11:53 صبح
سلام دوستان. من در یه موردی گیج شدم و اون طریقه استفده از تاریخ شمسی هست. من میخوام واسه هر کامنتی که توی دیتابیس ذخیره میشه، تاریخ درج هم ذخیره شه، پس از یه تابع که تاریخ میلادی رو به تاریخ شمسی تبدیل میکنه استفاده کردم.منتهی خودم از این تابع سر در نمیارم و فقط میتونم فراخونی کنمش.
حالا سوالم اینه که من به صورت شمسی باید تاریخ رو توی دیتابیس ذخیره کنم؟ خروجی تابع به این فرم هست: "یکشنبه، 13 شهریور 1390" خب من اینو چه جوری توی فیلدی از نوع date ذخیره کنم؟
اگر هم بخوام تاریخ رو بگیرم و توی دیتابیس ذخیره کنم و فقط موقع نمایش، تاریخ رو ورودی تابع قرار بدم، مشکلم اینه که اصلا نمیدونم این تابع چه جوری و کجا ورودی میگیره.
میشه راهنماییم کنید؟ اون تابع رو اینجا ضمیمه میکنم.

mohsen6500
یک شنبه 13 شهریور 1390, 12:59 عصر
سلام دوست عزیز
خوب این تاریخ رو توی یه متغییر بریز و متغییر رو توی یه فیلد در مای اسکیو ال بذار!
مقدار فیلد هم varvhar بذار
موقع فرخوانیش هم فیلد رو فراخوانی کن دیگه!

arashmanteghi
یک شنبه 13 شهریور 1390, 17:42 عصر
خب اون وقت ضایع نیست تاریخ توی فیلدی ار نوع varchar ؟ من میخواستم اگه بشه روش محاسبات انجام شه. مثلا اگه توی varchar بزارم، از کجا میتونم حساب کنم که فلان کامنت واسه چند روز پیشه؟

armsoftpc
یک شنبه 13 شهریور 1390, 19:20 عصر
به نام خدا
با سلام
من زیاد در این مورد کار نکردم ، اما در جوملا از نوع date استفاده کرده ، در ضمن تمامی تاریخ ها باید در دیتابیس به صورت میلادی ذخیره شود ، بعد با استفاده از توابع اون رو به صورت شمسی نمایش میدهیم.
به جوملا یه نگاهی بندازید! اگر به نتیجه ای رسیدی برای ما هم بگذارید.:قلب:

mohsen6500
یک شنبه 13 شهریور 1390, 21:34 عصر
خوب چه فرقی میکنه؟
شما با وارد کردن date هم آخرش باید اونو فراخوانی کنید
وبعدش تجزیش کنید و بعد بدونید که مال چند روز پیش هست!
برای تجزیه کردنش هم از explode میتونید استفاده نمایید
موفق باشید

Unique
دوشنبه 14 شهریور 1390, 00:50 صبح
نمیدونم چرا راه حل های پیچ در پیچ میدین !

به طور کلی زمانی که شما تاریخ ها را در پایگاه داده ذخیره میکنی ! باید نوع داده را از Date یا Datetime استفاده کنی ! مثلا میخوای کامنت ها را با تاریخ نشون بدی ! نباید تاریخ را به فارسی ذخیره کنی ! شما تاریخ را به میلادی ذخیره کن ! زمان نمایش میلادی را شمسی کن و نمایش بده !
یه حالت هایی هم هست که مثلا میخوای از کاربر یه تاریخ شمسی را بگیری و توی پایگاه بریزی (مثل سال تولدش) باز هم بهتره اونو به میلادی تبدیل و ذخیره کنی ! و موقع نمایش با تبدیل به شمسی و استفاده از توابع دیگه نمایش بدی ! البته اکثرا در حالت دوم تاریخ را به صورت عددی 13900614 ذخیره میکنم اما با این حال 100% بهتره به صورت میلادی ذخیره بشه !

در این حالت شما همیشه میتونی با استفاده از توابع قدرتمند تاریخ در MySQL به سادگی query های مورد نظر را بدی و خروجی مناسبی بگیری !

armsoftpc
دوشنبه 14 شهریور 1390, 17:05 عصر
به نام خدا
با سلام به همه ی دوستان
آقا محسن حرف شما کاملا غلطه، چون ما قرار است ، کار را به صورت داینامیک انجام بدیم نه استاتیک!!!!:عصبانی++:
اگر این جوری بود جوملا ، ویبولتین و وردپرس از روش استاتیک استفاده می کردند!
روش ذخیره به صورت اعداد درست به نظر نمیاد ، چون ما که از اعداد سر درنمیاریم ، کی می تونه این همه ثانیه رو تقسیم کنه!!!:کف:
خواهشا یکی بیاد کد این کار رو قرار بده یعنی تبدیل تاریخ میلادی به شمسی و برعکس، بعد از تبدیل تاریخ شمسی به میلادی در پایگاه داده ذخیره کنیم و برای نمایش هم تاریخ بعد از فراخوانی از پایگاه داده به شمسی تبدیل بشه!
این نحوه کاره ، روش های دیگه هم به نظره من غلط و اشتباهه!:بامزه:
کسی می تونه این کد رو بزاره ، این کد بسیار کاربرد داره ، تازه به اسم خودش هم ثبت میشه.
موفق باشید.

mahan19
دوشنبه 14 شهریور 1390, 20:10 عصر
من از اين روش استفاده ميكنم: تابع تبديل تاريخ رو صدا ميزنم ، تبديل به شمسي ميكنم ، بعد از نوع varchar يا text ‌ذخيره ميكنم .خوندنش هم آسونه ، نياز به تبديل هم نيست.

Unique
سه شنبه 15 شهریور 1390, 17:00 عصر
روش ذخیره به صورت اعداد درست به نظر نمیاد ، چون ما که از اعداد سر درنمیاریم ، کی می تونه این همه ثانیه رو تقسیم کنه!!!

این روش غلط نیست ! روش درستی هستش البته برای ذخیره تاریخ نه تاریخ و زمان ، گرچه زمان را هم میشه ذخیره کرد ! تنها ایرادش وقتی هست که مثلا میخوای بر اساسش Group By کنی یا محاسباتی را با خود mysql انجام بدی ! برای ذخیره و نمایش و جستجو های ساده خیلی عملی هستش !


خواهشا یکی بیاد کد این کار رو قرار بده یعنی تبدیل تاریخ میلادی به شمسی و برعکس، بعد از تبدیل تاریخ شمسی به میلادی در پایگاه داده ذخیره کنیم و برای نمایش هم تاریخ بعد از فراخوانی از پایگاه داده به شمسی تبدیل بشه!

توی سایت فراوونه ، بگردی پیدا میکنی !

armsoftpc
سه شنبه 15 شهریور 1390, 21:07 عصر
به نام خدا
با سلام
با تشکر از همه ی دوستان

توی سایت فراوونه ، بگردی پیدا میکنی !
اگه لطف کنید ، آدرس سایت رو درج کنید خوب می شد.
با تشکر!

MMSHFE
چهارشنبه 16 شهریور 1390, 08:42 صبح
خواهشا یکی بیاد کد این کار رو قرار بده یعنی تبدیل تاریخ میلادی به شمسی و برعکس، بعد از تبدیل تاریخ شمسی به میلادی در پایگاه داده ذخیره کنیم و برای نمایش هم تاریخ بعد از فراخوانی از پایگاه داده به شمسی تبدیل بشه!
انجام شده: http://jdf.scr.ir (http://jdf.scr.ir/)
حقيقتاً دست برنامه نويسش درد نكنه. خيلي عالي نوشته. راهنماش هم توي سايتش موجوده. حتي امكاناتش از توابع تاريخ خود PHP هم بيشتره. براي مثال، اينكه سال گاوه يا هر جانور ديگه اي و... همه توش موجوده. موفق باشيد.

Arthas1990
چهارشنبه 16 شهریور 1390, 12:06 عصر
اگه کاربران و دیتاهات کمه میتونی میلادی درج کنی و تبدیل کنی به شمسی زمان خروجی گرفتن .
اما من وا3 دیتا و ریکوست های سنگین ، هر دو رو در جدول درج میکنم . زمان جستجو با خود mysql از میلادی استفاده میکنم اما برای خروجی و چاپ و غیره از فیلد شمسی استفاده میکنم تا وا3 تبدیل حافطه و پروسس و... نگیرم . اما اگه دیتات کمه این روش مسخره اس چون فیلد اضافه داری و الکی بانکت رو سنگین میکنی .

arashmanteghi
چهارشنبه 16 شهریور 1390, 20:35 عصر
از همه دوستانی که نظر دادند ممنونم، من هم با نظر محسن مخالفم و میدونم که باید تاریخ میلادی رو اول ذخیره کرد و بعدا موقع خروجی گرفتن به شمسی تبدیل شه، اما من با نحوه وارد کردن پارامتر های تابعی که تویه اولین پست گذاشتم آشنا نبودم و فعلا هم از اون روش محسن به صورت موقتی استفاده کردم. این پروژه دانشجوییم هست که دارم روش کار میکنم و میدونم کار غلطیه، اما استاد کد رو نگاه نمیکنه و فقط خروجی ای میخواد که درست باشه.
من چطور میتونم مقدار تاریخ و زمانی که از database میخونم رو به اون تابع که توی پست اول ضمیمه کردم بفرستم و خروجی بگیرم؟ کاش یه نگاه به اون میکردید و از روی اون من رو راهنمایی میکردین. اگر هم نتونستین ، اشکال نداره، خودم یه خاکی تو سرم میکنم.

Unique
چهارشنبه 16 شهریور 1390, 22:36 عصر
اگهsearch میکردی زودتر به جواب میرسیدی !
از کتابخونه jdf استفاده کن ، میتونی از اینجا بگیری : http://jdf.scr.ir

برای تبدیل تاریخ شمسی ، معمولا روز و ماه و سال را نیاز داری از کاربر بگیری ، با تابع jalali_to_gregorian میتونی تبدیلش کنی به میلادی و بریزی توی mysql ، زمانی هم که میخوای میلادی را شمسی کنی از تابع jdate استفاده میکنی اینطوری :

jdate("Y/m/d",strtotime($date_field))

Reza1607
پنج شنبه 17 شهریور 1390, 00:05 صبح
سلام دوستان من يه راه حل بهتري سراغ دارم
شما فيلد تاريخ رو از نوع عددي بكيرين و زماني كه خواستين تاريخ درج يك خبر يا موضوعي رو وارد كنين (بذارين سيستم انجام بده) از تابع time‎(‎‎)‎‏ استفاده كنين و زماني كه خواستين تاريخ رو درج كنين از كتابخانه هاي موجود (مثل jdate‏)‏ استفاده كنين
مثلا

echo jdate("Y/m/d D",$row['date']);
اين كار به كارتون انعطاف ميده

armsoftpc
جمعه 18 شهریور 1390, 19:21 عصر
به نام خدا
با سلام
با تشکر از تمامی دوستان خصوصا MMSHFE , Unique:تشویق:.
مثل این که کسی نمی خواد کد رو واضح بزاره و همه لینک میدن:عصبانی:، اشکال نداره کمی دوستان صبر کنند خودم باید دست به کار شوم ، بزودی اگه چیزی دستگیرم شده به صورت 2 تابع که یکی به میلادی رو به شمسی تبدیل می کنه و دیگری شمسی رو به میلادی تبدیل میکنه + ذخیره در پایگاه داده براتون میذارم.:متفکر:
موفق باشید.

MMSHFE
جمعه 18 شهریور 1390, 20:17 عصر
دوست عزيز اگه لينك ميگذاريم بخاطر احترام به حقوق برنامه نويسش هست. فايل مربوطه رو كه از همون سايت گرفتم اينجا ضميمه كردم كه استفاده كنيد. همراه با راهنما و فهرست توابع و كاربردهاشون. براي مثال، دو تابع gregorian_to_jalali و jalali_to_gregorian كه وظيفه تبديل ميلادي به شمسي و برعكس رو برعهده دارن و همچنين توابع مختلف ديگه. موفق باشيد.

armsoftpc
شنبه 19 شهریور 1390, 20:58 عصر
به نام خدا
با سلام
دوست عزیز ببخشید اگه حرفی زدم که به شما برخورده! دوستان منظور من رو متوجه نشدند ، من این کد رو قبلا دانلود کرده بودم و منظور من کد به صورت آماده بود بدون هیچ گونه ویرایشی!!!:لبخند:
در ضمن منظور من هم فقط ما نبود!به هر حال ببخشید.
با تشکر از شما و تمامی دوستان.
موفق و سربلند باشید.

armsoftpc
یک شنبه 20 شهریور 1390, 20:23 عصر
به نام خدا
با سلام
ای کاش می شد نحوه ذخیره در دیتابیس هم ذکر میکردید شما همانطور که می دانید دیتابیس یک رشته می خواد و یک رشته تحویل میده.
موفق باشید.

MMSHFE
سه شنبه 22 شهریور 1390, 09:31 صبح
به نظر من يكي از راههاي مناسب، اينه كه يك فيلد عددي بگذاريم براي تاريخ و خروجي تابع time در PHP رو توي اون ذخيره كنيم. اينطوري هم ميتونيم درصورت تمايل، زمانهاي موردنظرمون رو با هم مقايسه كنيم و هم اينكه به هر شكل كه بخوايم با كمك توابع date و jdate به هر قالبي كه بخوايم، اون رو نمايش بديم. خوشحال ميشم نظر دوستان رو درباره اين روش بدونم. موفق باشيد.

Yousha
سه شنبه 22 شهریور 1390, 13:13 عصر
https://github.com/zoghal/Presian-Date-for-MySQL

armsoftpc
چهارشنبه 23 شهریور 1390, 01:14 صبح
به نام خدا
با سلام
همانطور که توی پست های قبلی قولش رو داده بودم ، این بار دست پر اومده ام!!!:بوس::لبخند:

https://github.com/zoghal/Presian-Date-for-MySQL
آقای با سواد که به هر نحوی به من توهین کردی ، این کار دیگه برای چیه! اصلا چه لازمه! خود mysql توابع لازم رو داره!:قهقهه:
اینم کدش برید حالش رو ببرید!

$sql="SELECT DISTINCT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `day` FROM articles";
$result=arm_query($sql);
$row=$result->fetch_object();
$date_mtj=gregorian_to_jalali($row->year, $row->month, $row->day, "/");
echo $date_mtj;

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

Yousha
چهارشنبه 23 شهریور 1390, 02:04 صبح
آقای با سواد که به هر نحوی به من توهین کردی ، این کار دیگه برای چیه! اصلا چه لازمه! خود mysql توابع لازم رو داره!
خیلی چیزه خنده داریه؟
یا جوک گفتم؟!
عقده ای شده بچه؟

حد اقل نگرفتی دانلودش کنی ببینی چیه! اون مبدل روز/ماه به زبان فارسی هستش. نه یک مبدل عددی ساده با سواد!!

امثال تو هستن که آبروی برنامه نویسهای PHP رو می برن دیگه!

armsoftpc
چهارشنبه 23 شهریور 1390, 11:18 صبح
به نام خدا
با سلام به همه ی دوستان

عقده ای شده بچه؟اون که خودتی ، اما جواب تو خاموشیست! چون اولا ارزش رو نداری:قهقهه::بامزه::گیج: ، دوما تاپیک مثل تاپیک قبلی قبلی بسته می شه و دیگه دوستان بزرگوار نمی تونند از استفاده کنند!:ناراحت:

حد اقل نگرفتی دانلودش کنی ببینی چیه! اون مبدل روز/ماه به زبان فارسی هستش. نه یک مبدل عددی ساده با سواد!!اتفاقا دانلودش هم کردم و استفاده هم کردم ، اما نیاز به این همه کار نداره که!!!:قهقهه:
همون فایل jdf.php رو استاد بزرگوار MMSHFE لینکش رو قرار دادن دانلود کنی و همین توابع که کدش ها رو گذاشتم بسه!

امثال تو هستن که آبروی برنامه نویسهای PHP رو می برن دیگه! باسواد!:قهقهه:مثلا تو چی کار مهمی انجام دادی که این قدر زبونت درازه!!!