PDA

View Full Version : مشکل مقایسه تاریخ در php



user.mohammad
یک شنبه 09 تیر 1398, 20:12 عصر
سلام و درود
سه تاریخ در دیتابیس ثبت کردم به ترتیب: 15/12/1397 و 01/04/1398 و 10/04/1398 (ارقام انگلیسی)
و میخام اون سطر هایی که تاریخشون کوچکتر یا مساوی تاریخجاری(امروز)(ارقام انگلیسی) هستند و flag شون 0 هست رو برگردونه
که در خروجی 01/04/1398 رو برمیگردونه اما 15/12/1397 رو نه.
دوستان لطفا راهنمایی کنید.
کد:


<?phpinclude( "../object/main.php" );include( "../tools/date/jdf.php" );$security = new security;$connect = new connect;$template = new template;?><!DOCTYPE html><html lang="fa" dir="rtl">
<head> <meta charset="utf-8"></head><?php$date1 = jdate( 'd/m/Y', '', '', '', 'en' );$sql_msg = "SELECT * FROM `tbl_notes` WHERE `date` <='" . $date1 . "'AND flag = 0";$result_msg = $connect->query( $sql_msg );$counter = 0;while ( $rows_msg = mysql_fetch_assoc( $result_msg ) ) { $counter++; echo( $rows_msg[ 'title' ] );}if ( $counter != 0 ) echo "<font color=red>($counter)</font>&nbsp;&nbsp;یادداشت خوانده نشده";else echo "یادداشت ها";?>

kazemimorteza
یک شنبه 09 تیر 1398, 23:25 عصر
سلام و درود بر شما.
تاریخ ها را به timestamp تبدیل کن و در دیتابیس قرار بده
تاریخ ها را به تاریخ میلادی برگردون و سپس به timestamp تبدیل کن و مقایسه کن و دوباره از timestamp به میلادی و از میلادی به خورشیدی برگردون.

kazemimorteza
یک شنبه 09 تیر 1398, 23:33 عصر
https://jdf.scr.ir/jdf/?t=php

با استفاده از لایبراری بالا تاریخ جلالی و میلادی را به هم تبدیل می کنی. برای تبدیل تاریخ جلالی به میلادی فرض کنید که تاریخ را به صورت یک رشته داری با استفاده از تابع explode روز و ماه و سال را از هم جدا کن بعد به عنوان وردی به تابع jalali_to_gregorian بفرست حالا تاریخ میلادی را بدست اوردی. حالا می تونی تاریخ میلادی را با استفاده از تابع strtototime به timestamp تبدیل کن حالا یه دونه عدد داری و می تونی مقایسه کنی دو تا تاریخ را با هم.

https://stackoverflow.com/questions/113829/how-to-convert-date-to-timestamp-in-php

ali_sed
سه شنبه 18 تیر 1398, 13:08 عصر
سلام و درود
سه تاریخ در دیتابیس ثبت کردم به ترتیب: 15/12/1397 و 01/04/1398 و 10/04/1398 (ارقام انگلیسی)
و میخام اون سطر هایی که تاریخشون کوچکتر یا مساوی تاریخجاری(امروز)(ارقام انگلیسی) هستند و flag شون 0 هست رو برگردونه
که در خروجی 01/04/1398 رو برمیگردونه اما 15/12/1397 رو نه.
دوستان لطفا راهنمایی کنید.


سلام

همانطور که دوستان اشاره کردند بهتر است تاریخ را اگر مربوط به زمان درج اطلاعات و یا بروزرسانی آن می باشد را با فرمت timestamp و اگر ممکن است تاریخ هر مقدار کوچک یا بزرگی را بگیرد با فرمت datetime یا date ذخیره کنید.

گاهی نیاز هست که اطلاعات ماه و سال شمسی ذخیره شود تا راحت تر بتوان کوئری های GROUP BY روی تاریخ پیاده کرد. هر چند بهتر است در کنار آن تاریخ با فرمت timestamp نیز درج گردد.

دقت کنید که سال سمت چپ و ماه وسط و روز سمت راست قرار گیرد مثلا بصورت ۱۳۹۸۰۴۲۱ درج شود حتما سال ۴ رقمی و ماه و روز دو رقمی باشند. بدین ترتیب به راحتی می توانید از شروط کوچکتر و بزرگتر استفاده کنید.