PDA

View Full Version : اشکال عجیب در مقایسه بین دو تاریخ



تبسم ساینا
شنبه 25 مرداد 1393, 12:30 عصر
سلام دوستان , من این دو تا تاریخ رو به ان صورت اختلاف شون رو میگیرم ولی جواب اشتباه میده:
date_default_timezone_set('Asia/Tehran');
$date=date('Y-m-d H:i:s');
$diff = strtotime("2014-08-16 12:51:31") - strtotime("2014-08-16 10:00:00");
$chap= date("H:i", $diff);
echo $chap;
باید جواب بده 02:51 ولی میزنه 06:21!!!
دلیلش چیه واقعا؟؟

bagherok
شنبه 25 مرداد 1393, 13:27 عصر
کجاش عجیبه !!
خوب03:30 اختلاف زمانی ماست با گرونیج ...

timezone رو GMT بذارید درست میشه

date_default_timezone_set('GMT');



یا
خودتون 3 ساعت و نیم کم کنید



echo date("H:i", $diff-(3.5*60*60));

Unique
شنبه 25 مرداد 1393, 13:29 عصر
دلیلش اینه که وقتی شما پارامتر دوم strtotime را نمیدین ! php از تابع time استفاده میکنه که timestamp را به UTC میده. بعدش که شما اختلاف را به UTC محاسبه میکنید ! از تابع date میخواین که اون اختلاف timestamp به UTC را به زمان تهران بهتون بده ! خوب تهران ۳:۳۰ از UTC جلوتره و بهتون 6:21 میده !

زمانی که از توابع تاریخ و زمان استفاده میکنین باید دقیقا بدونین دارین چیکار میکنین.

تبسم ساینا
شنبه 25 مرداد 1393, 19:27 عصر
ممنونم دوستان.. من نمیدونستم اینا رو.

تبسم ساینا
شنبه 25 مرداد 1393, 19:41 عصر
البته من تایم زون رو GMT کردم ولی درست نشد !!
فک کنم مجبورباشم از اون کد دستی استفاده کنم.

bagherok
شنبه 25 مرداد 1393, 19:56 عصر
البته من تایم زون رو GMT کردم ولی درست نشد !!
فک کنم مجبورباشم از اون کد دستی استفاده کنم.

یعنی کد زیر جواب نمیده!!

<?php
date_default_timezone_set('GMT');
$date=date('Y-m-d H:i:s');
$diff = strtotime("2014-08-16 12:51:31") - strtotime("2014-08-16 10:00:00");
$chap= date("H:i", $diff);
echo $chap;

وقتی تایم زون رو گرنویج میذارید اختلاف زمانی یعنی صفر

تبسم ساینا
شنبه 25 مرداد 1393, 21:04 عصر
در مورد اون کد جواب داد, مشکل من سر این کده که قراره اختلاف با زمان جاری محاسبه بشه . اگه اینجوری بنویسم اشتباه میده 6 ساعت جلوتر میده.
date_default_timezone_set('GMT');
$date=date('Y-m-d H:i:s');
$diff = strtotime($date) - strtotime("2014-08-16 10:00:00");
echo date("H:i");

مثلا میده :17:05
ولی اگه اینطوری بنویسم درست میده جوابو:
date_default_timezone_set('Asia/Tehran');
$date=date('Y-m-d H:i:s');
$diff = strtotime($date) - strtotime("2014-08-16 10:00:00");
echo date("H:i",$diff-(3.5*60*60));

مینویسه :11:34

bagherok
شنبه 25 مرداد 1393, 22:45 عصر
<?php

date_default_timezone_set('GMT');
echo 'GMT <br />Now Date ' .date('Y-m-d H:i:s'). ' - 2014-08-16 18:00:00 =';
echo date("H:i",strtotime(date('Y-m-d H:i:s'))-strtotime("2014-08-16 18:00:00")).'<br />';

echo '<hr />';

date_default_timezone_set('asia/tehran');
echo 'Tehran <br />Now Date ' .date('Y-m-d H:i:s'). ' - 2014-08-16 18:00:00 =';
echo date("H:i",strtotime("-210 minutes",strtotime(date('Y-m-d H:i:s')))-strtotime("2014-08-16 18:00:00"));

?>