PDA

View Full Version : سوال: تبدیل تاریخ و زمان به x دقیقه پیش



danialz
پنج شنبه 21 اسفند 1393, 15:10 عصر
با سلام !
بنده فانکشن زیر را در یک سایت غیرفارسی پیدا کرده ام !
کاری که باید انجام بده , مثال: تبدیل "2015-12-01 03:52:51" به "2 روز پیش" !


date_default_timezone_set('Asia/Tehran');
function get_time_ago($time_stamp)
{
$time_difference = strtotime('now') - $time_stamp;

if ($time_difference >= 60 * 60 * 24 * 365.242199)
{
/*
* 60 seconds/minute * 60 minutes/hour * 24 hours/day * 365.242199 days/year
* This means that the time difference is 1 year or more
*/
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 365.242199, 'سال');
}
elseif ($time_difference >= 60 * 60 * 24 * 30.4368499)
{
/*
* 60 seconds/minute * 60 minutes/hour * 24 hours/day * 30.4368499 days/month
* This means that the time difference is 1 month or more
*/
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 30.4368499, 'ماه');
}
elseif ($time_difference >= 60 * 60 * 24 * 7)
{
/*
* 60 seconds/minute * 60 minutes/hour * 24 hours/day * 7 days/week
* This means that the time difference is 1 week or more
*/
return get_time_ago_string($time_stamp, 60 * 60 * 24 * 7, 'هفته');
}
elseif ($time_difference >= 60 * 60 * 24)
{
/*
* 60 seconds/minute * 60 minutes/hour * 24 hours/day
* This means that the time difference is 1 day or more
*/
return get_time_ago_string($time_stamp, 60 * 60 * 24, 'روز');
}
elseif ($time_difference >= 60 * 60)
{
/*
* 60 seconds/minute * 60 minutes/hour
* This means that the time difference is 1 hour or more
*/
return get_time_ago_string($time_stamp, 60 * 60, 'ساعت');
}
else
{
/*
* 60 seconds/minute
* This means that the time difference is a matter of minutes
*/
return get_time_ago_string($time_stamp, 60, 'دقیقه');
}
}

function get_time_ago_string($time_stamp, $divisor, $time_unit)
{
$time_difference = strtotime("now") - $time_stamp;
$time_units = floor($time_difference / $divisor);

settype($time_units, 'string');

if ($time_units === '0')
{
return 'لحظاتی پیش';
}
elseif ($time_units === '1')
{
return 'یک ' . $time_unit . ' پیش';
}
else
{
/*
* More than "1" $time_unit. This is the "plural" message.
*/
// TODO: This pluralizes the time unit, which is done by adding "s" at the end; this will not work for i18n!
return $time_units . ' ' . $time_unit . ' پیش';
}
}
$Date = date('Y-m-d h:i:s');
echo get_time_ago($Date);

وقتی خروجی میگیرم : "45 سال پیش" :|
آیا مشکل از این فانکشنه یا ... ؟
با روش های دیگری هم میشه اینکار رو انجام داد !؟

n0o0b_sina
پنج شنبه 21 اسفند 1393, 15:33 عصر
سلام


date_default_timezone_set('iran');

$min = 60;
echo date("Y-m-d h:i:s", time() - $min*60);

danialz
پنج شنبه 21 اسفند 1393, 15:47 عصر
سلام


date_default_timezone_set('iran');

$min = 60;
echo date("Y-m-d h:i:s", time() - $min*60);
فکر کنم منظورم رو متوجه نشدید !
ببینید بیشتر سایت ها و وبلاگ ها برای نمایش تاریخ پستی که ارسال میکنن مینویس: 17 شهریور 1392
من میخوام بنویسه: 18 روز پیش
مثال : وبسایت اینستاگرام = instagram.com
!

n0o0b_sina
پنج شنبه 21 اسفند 1393, 15:57 عصر
خب شما تاریخ رو به صورت time() توی دیتابیس ذخیره کنیدبعد تایم فعلی رو از اون کم کنید بعد تقسیم بر تعداد ثانیه ی هر روز بکنید تعداد روز میاد! یا با تابع mktime() تاریخ که به صورت "Y-m-d h:i:s" ذخیره شده رو تبدیل به ثانیه بکنید، حتی میتونید تعیین کنید که اگه ثانیه ها از تعداد ثانیه های 1 روز کمتر شد بر اساس ساعت یا دقیقه نشون بده مثلا 10 دقیقه قبل! به همین سادگی :)

danialz
پنج شنبه 21 اسفند 1393, 16:04 عصر
خب شما تاریخ رو به صورت time() توی دیتابیس ذخیره کنیدبعد تایم فعلی رو از اون کم کنید بعد تقسیم بر تعداد ثانیه ی هر روز بکنید تعداد روز میاد! یا با تابع mktime() تاریخ که به صورت "Y-m-d h:i:s" ذخیره شده رو تبدیل به ثانیه بکنید، حتی میتونید تعیین کنید که اگه ثانیه ها از تعداد ثانیه های 1 روز کمتر شد بر اساس ساعت یا دقیقه نشون بده مثلا 10 دقیقه قبل! به همین سادگی :)
میشه یک نمونه کد بدید !؟

hamidhassas
شنبه 23 اسفند 1393, 00:02 صبح
آموزش استفاده از jdf و datepicker در تقویم هجری شمسی، میلادی (http://www.hassas-computer.com/preview.php?post=1946)

Tarragon
شنبه 23 اسفند 1393, 14:01 عصر
آقا همین فانکشنی که شما نوشتید صحیحه و مشکلی نداره!
اما شما بد داری صداش می زنی.
شما فانکشن رو تعریف کن و بعد اینجوری صداش بزن
$Date = strtotime('-2 week');
echo get_time_ago($Date); یعنی شما باید بعنوان parameter اول یک timestamp وارد کنید.