سلام
من از کتابخانه jdf استفاده می کنم، در جدول DB یک فیلد دارم به نام dtime که timestamp ها در آن ذخیره شده اند، کاربر در فرم یک تاریخ شمسی وارد می کند، مثلا :
۱۳۹۹/۰۵/۱۴
چطور می تونم این تاریخ را به timestamp تبدیل کنم که بتوانم بر اساس آن در ستون timestamp ها جستجو کنم؟
از مثال تابع jmktime استفاده کردم اما نتیجه نگرفتم.
$getTime = jmktime($D1);
سلام
تابع jmktime دارای ۸ پارامتر هست بصورت زیر:
jmktime( $hour , $minute , $second , $month , $day , $year , '' , $timezone );
پارامتر های تابع jmktime
hour$ : پارامتر اوّل ، ساعت ( 24 ساعته ، 23 - 0)
minute$ : پارامتر دوم ، دقیقه ( 59 - 0)
second$ : پارامتر سوم ، ثانیه ( 59 - 0)
month$ : پارامتر چهارم ، ماه ( 12 - 1)
day$ : پارامتر پنجم ، روز ( 31 - 1)
year$ : پارامتر ششم ، سال ( کامل 4 رقمی )
پارامتر هفتم ، در آن چیزی وارد نکنید. قبلاً $is_dst بود ، امّا در php5.1 منسوخ و در php7 حذف گردید.
timezone$ : پارامتر هشتم ، منطقه ی زمانی مورد نظر
جهت تنظیم یک منطقه ی زمانی برای اعمال اختلاف ساعت در خروجی است که مقدار پیشفرض آن به وقت تهران ، پایتخت جمهوری اسلامی ایران 'Asia/Tehran' می باشد
تشکر ، اما در عمل به چه شکل باید تاریخ ورودی کاربر مثلا "۱۳۹۹/۰۵/۱۴" را مجزاسازی کرد و به این تابع داد، مقادیر ساعت ، دقیقه و ثانیه درخواستی رو اگر به تاریخ الآن بدم که در بازه جستجو مشکل پیدا میشه با timestamp ثبت شده مغایرت پیدا میکنه؟!
الان از تابع تبدیل میلادی به شمسی این کتابخانه هم استفاده می کنم تاریخ رو به شکل صحیح تبدیل نمیکنه ،
$tm_grog = gregorian_to_jalali($y, $mf, $df, $mod);
خروجی نمونه :
1399-5-4
در صورتی که باید بدین شکل باشه :
1399-05-04
چطور می تونم اصلاح کنم؟
(14-05-1399، 04:33 ب.ظ)پیام حیاتی نوشته: [ -> ]تشکر ، اما در عمل به چه شکل باید تاریخ ورودی کاربر مثلا "۱۳۹۹/۰۵/۱۴" را مجزاسازی کرد و به این تابع داد، مقادیر ساعت ، دقیقه و ثانیه درخواستی رو اگر به تاریخ الآن بدم که در بازه جستجو مشکل پیدا میشه با timestamp ثبت شده مغایرت پیدا میکنه؟!
$str = "1399/01/01";
print_r (explode("/",$str))
Result:
Array ( [0] => 1399 [1] => 01 [2] => 01 )
(14-05-1399، 05:34 ب.ظ)artablog نوشته: [ -> ]$str = "1399/01/01";
print_r (explode("/",$str))
Result:
Array ( [0] => 1399 [1] => 01 [2] => 01 )
<?php
if (isset($_POST['subm-date-search'])) {
$D1 = $_POST['d1'];
$finalD1 = explode('/', $D1);
$hour = date('h');
$minute = date('i');
$second = date('s');
$month = $finalD1[1];
$day = $finalD1[2];
$year = $finalD1[0];
$timezone = "";
jmktime($hour, $minute, $second, $month, $day, $year, '', $timezone);
}
?>
الان print_r می کنم خطا دارم باز :
Warning: mktime() expects at most 6 parameters, 7 given in
دو پارامتر آخر اختیاری هست اما با حذف آنها هم باز خطای فوق برقراره
نقل قول:الان print_r می کنم خطا دارم باز :
Warning: mktime() expects at most 6 parameters, 7 given in
دو پارامتر آخر اختیاری هست اما با حذف آنها هم باز خطای فوق برقراره
خطا نشون میده شما تابع mktime خود php رو صدا زدین ببین تابع کتابخانه JDF اینه jmktime
کد زیر رو تو یه صفحه تست اجرا کن نتیجه درسته ضمنا خروجی تابع jmktime آرایه نیست میتونی با echo چاپ کنی
$hour = '22';
$minute = '45';
$second = '20';
$month = '09';
$day = '05';
$year = '1399';
$timezone = 'Asia/Tehran';
$date = jmktime($hour, $minute, $second, $month, $day, $year, '', $timezone);
echo $date;
Result:
1606331720
(15-05-1399، 09:09 ق.ظ)artablog نوشته: [ -> ]خطا نشون میده شما تابع mktime خود php رو صدا زدین ببین تابع کتابخانه JDF اینه jmktime
کد زیر رو تو یه صفحه تست اجرا کن نتیجه درسته ضمنا خروجی تابع jmktime آرایه نیست میتونی با echo چاپ کنی
$hour = '22';
$minute = '45';
$second = '20';
$month = '09';
$day = '05';
$year = '1399';
$timezone = 'Asia/Tehran';
$date = jmktime($hour, $minute, $second, $month, $day, $year, '', $timezone);
echo $date;
Result:
1606331720
تشکر ، فایل jdf من قدیمی بود و حتی با دستور درست هم خطا داشتم فایل کتابخانه رو دوباره دریافت کردم از سایت که خروجی داد، "اما" در این تابع نیاز هست که ما زمان رو (ساعت ، دقیقه، ثانیه) وارد کنیم در غیر این صورت اگر فیلدها رو خالی بزارم عدد timestamp خروجی اشتباه می شود و در نهایت جستجو بدون نتیجه.
مثلا من الان دو رکورد دارم در تاریخ "
1399/05/14"، اگر به تابع زمان های ثبت شده رو ندم، timestamp های این دو رکورد رو اشتباه سرچ میکنه.
چطور می تونم این مشکل رو حل کنم که تنها بر روی تاریخ متمرکز شه؟
کدهای بنده :
if(isset($_POST['SrchDateRange']) && !empty($_POST['txtDateStart'])) {
$DateStart = mysqli_real_escape_string($conn, $_POST['txtDateStart']);
$DateEnd = mysqli_real_escape_string($conn, $_POST['txtDateEnd']);
$D1 = explode("/", $DateStart);
$hour = '09';
$minute = '34';
$second = '53';
$month = $D1[1];
$day = $D1[2];
$year = $D1[0];
$timezone = 'Asia/Tehran';
$date = jmktime($hour, $minute, $second, $month, $day, $year, '', $timezone);
echo $date . '<br />';
$sql = "SELECT * FROM `whatsapp` WHERE `w_dtime` = $date";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["w_id"]. " - bingo you got it <br>";
}
} else {
echo "0 results";
}
?>
نحوه دریافت زمان ها:
date_default_timezone_set('Asia/Tehran');
$tme = date("h:i:sa"); //get just time : 04:58:20am
$time = time();
ببینید خیلی سادست من زمان رو به صورت timestamp با کمک تابع time گرفتم و درج کردم چون طبق گفته اساتید نباید زمان رو شمسی گرفت و ...الان کاربر تاریخ رو شمسی وارد میکنه و من باید اول تبدیلش کنم که برای این کار تمام سایت هایی که سرچ کردم کتابخانه jdf و متد jmk رو معرفی کردن با یک مثال ساده که تمام مقادیر مورد نیاز تابع رو به صورت دستی وارد میکنن و اونطرف timestamp خروجی میگیرن، درست هم کار میکنه من اگر زمان درج رکورد رو که شامل ساعت ، دقیقه و ثانیه هست رو بهش بدم timestamp درست رو میده و جستجو نتیجه میده، اما هیچ مثال کاربردی برای اینکه تابع رو به شکلی که تنها متمرکز روی تاریخ کنم که زمان رو بیخیال شه پیدا نکردم.
گفتم اصلا این رو بیخیال میشم همون شمسی میگیرم، تابع geo رو معرفی کردن تست کردم دیدم تاریخ میلادی رو وقتی تبدیل میکنه به جای اینکه مثلا بشه :
1399/05/05
بدین شکل تبدیل میکنه:
1399/5/5
بدین شکل کوئری ها sql مثل between دیگه خروجی نمیدن چون شکل صحیح تاریخ برای ماه و روز باید دو رقمی باشه ، اینطوری من یک تاریخ رو هم نمیتونم سرچ کنم حالا فکر کنید بخوام یک بازه تاریخ رو سرچ بزنم که دیگه هیچ.
من از سایر زبان ها و کتابخانه های تهیه شده برای آنها اطلاعی ندارم اما آیا واقعا آنها هم به همین شکل درگیر یک سرچ میشن یا فقط در php کتابخانه مناسبی وجود نداره؟!
برای ساعت و دقیقه و ثانیه، توی تاریخ شروع صفر بگذارین و توی تاریخ پایان، لحظهی انتهای روز:
$tsStart = jmktime(0, 0, 0, $sMonth, $sDay, $sYear);
$tsEnd = jmktime(23, 59, 59, $eMonth, $eDay, $eYear);
(21-05-1399، 11:07 ق.ظ)ADMIN نوشته: [ -> ]برای ساعت و دقیقه و ثانیه، توی تاریخ شروع صفر بگذارین و توی تاریخ پایان، لحظهی انتهای روز:
$tsStart = jmktime(0, 0, 0, $sMonth, $sDay, $sYear);
$tsEnd = jmktime(23, 59, 59, $eMonth, $eDay, $eYear);
بازهم timestamp درست برگشت داده نمیشه
کلاً jdf یه مقدار باگ داره بهتره از کتابخانهی
jdate استفاده کنین