PDA

View Full Version : مشکل عجیب با تابع Date() در php



aszasz
یک شنبه 08 دی 1392, 11:20 صبح
سلام
یک مشکل عجیب با تاریخ پیدا کردم فکر کنم بخاطر تغییر سال به 2014 هست.
مثلا من در فایل کانفیگم این تاریخ را تعرف میکنم :



'startdate' => '01/18/2014',


انوقت شرط زیر که باید اجرا بشه دیگه اجرا نمیشه :



if($START_DATE > date('m/d/Y'))
{
}


انگاری تابع date() یک مشکلی با 2014 داره!
لطفا راهنمایی کنید

danial.saeedi
یک شنبه 08 دی 1392, 11:52 صبح
با سلام دوست عزیز مشکل از سال 2014نیست!!!
بیین الان مشکلت حل میشه یا نه.

<?php
$START_DATE= array("startdate" => "01/1/2013");
if($START_DATE["startdate"]> date('m/d/Y'))
{
echo "swsw";
}
?>

برای اینکه تست کنی روزشو کم کن ببین نتیجه درست شده یا نه روی کامپیوتر من کار کرد
موفق باشید.

2undercover
یک شنبه 08 دی 1392, 12:15 عصر
کاری که شما انجام دادید کلا اشتباه هست.

چون الان مفسر PHP اون رشته رو تبدیل به عدد می کنه که نتیجه اش میشه 1 همچنین نتیجه تابع date رو هم همینطوربه عدد تبدیل می کنه و کاری به باقی تاریخ نداره که چی هست.

روش درستش اینه:



$date = '01/18/2014';
if(strtotime($date) > time()) {
// $date > Now
}

aszasz
یک شنبه 08 دی 1392, 12:38 عصر
کاری که شما انجام دادید کلا اشتباه هست.

چون الان مفسر PHP اون رشته رو تبدیل به عدد می کنه که نتیجه اش میشه 1 همچنین نتیجه تابع date رو هم همینطوربه عدد تبدیل می کنه و کاری به باقی تاریخ نداره که چی هست.

روش درستش اینه:



$date = '01/18/2014';
if(strtotime($date) > time()) {
// $date > Now
}


پس چطور تا الان کار میکرده بدون هیچ مشکلی و وقتی تاریخ های 2013 میگرفته درست بوده!!!

2undercover
یک شنبه 08 دی 1392, 13:03 عصر
خوب اگر هر دو تاریخ (تاریخ شما و تاریخ کنونی) در یک ماه و سال باشن و تفاوت فقط توی روز باشه مشکلی نیست ولی اگر ماه و یا سال متفاوت باشند برنامه دچار اشکال میشه!

omidabedi
یک شنبه 08 دی 1392, 13:12 عصر
پس چطور تا الان کار میکرده بدون هیچ مشکلی و وقتی تاریخ های 2013 میگرفته درست بوده!!!

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

درسته php زبان منعطف و اسونی هست از لحاظ syntax اما نه دیگه در این حد که

بعضی مواقع همین اسونی باعث میشه بعضی جاها ذهن برنامه نویس رو به اشتباه بندازه

برنامه ای که نوشتی استاندارد و صحیح نیست چون هر تابع فانکشن خاص خودش رو داره برای عملیات و ورودی ها/
مثلا شما نمیتونید ارایه رو توی دیتابیس مستقیما وار کنید.

aszasz
یک شنبه 08 دی 1392, 13:36 عصر
خوب اگر هر دو تاریخ (تاریخ شما و تاریخ کنونی) در یک ماه و سال باشن و تفاوت فقط توی روز باشه مشکلی نیست ولی اگر ماه و یا سال متفاوت باشند برنامه دچار اشکال میشه!

بله حق با شماست مشکل از همین بود .
از شما و همه دوستان خوب دیگه ممنون که کمک کردید.:قلب:

aszasz
یک شنبه 08 دی 1392, 13:58 عصر
کاری که شما انجام دادید کلا اشتباه هست.

چون الان مفسر PHP اون رشته رو تبدیل به عدد می کنه که نتیجه اش میشه 1 همچنین نتیجه تابع date رو هم همینطوربه عدد تبدیل می کنه و کاری به باقی تاریخ نداره که چی هست.

روش درستش اینه:



$date = '01/18/2014';
if(strtotime($date) > time()) {
// $date > Now
}


یک سوال دیگه برام پیش اومد الان این شرط بالا اگر تاریخ بزگتر از تاریخ امروز باشه اجرا میشه حالا سوال اینجاست اگر date بصورت زیر باشه:


$date = '01/18/2014 18:00';

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

SadeghPro19
یک شنبه 08 دی 1392, 14:48 عصر
بله اگه ساعت و ثانیه هم اضافه بشه باز هم درست عمل میکنه.

marys_farahani
یک شنبه 08 دی 1392, 17:15 عصر
از تابع



mktime($hour,$minute,$second,$month,$day,$year);


هم برای ساخت timestamp میشه استفاده کرد. (http://www.php.net/mktime)