টাইমস্ট্যাম্পকে সময়ে সময়ে পিএইচপি-তে রূপান্তর করা যেমন 1 দিন আগে, 2 দিন আগে ...


234

আমি ফর্ম্যাটটির একটি টাইমস্ট্যাম্প রূপান্তর 2009-09-12 20:57:19করতে এবং এ জাতীয় কিছুতে রূপান্তর করার চেষ্টা করছি3 minutes ago পিএইচপি-র ।

এটি করার জন্য আমি একটি দরকারী স্ক্রিপ্ট পেয়েছি, তবে আমি মনে করি এটি সময়ের পরিবর্তনশীল হিসাবে ব্যবহার করার জন্য এটি একটি আলাদা ফর্ম্যাট খুঁজছে। এই ফর্ম্যাটটির সাথে কাজ করতে আমি যে স্ক্রিপ্টটি সংশোধন করতে চাইছি তা হ'ল:

function _ago($tm,$rcs = 0) {
    $cur_tm = time(); 
    $dif = $cur_tm-$tm;
    $pds = array('second','minute','hour','day','week','month','year','decade');
    $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);

    for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
        $no = floor($no);
        if($no <> 1)
            $pds[$v] .='s';
        $x = sprintf("%d %s ",$no,$pds[$v]);
        if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
            $x .= time_ago($_tm);
        return $x;
    }

আমি মনে করি সেই প্রথম কয়েকটি লাইনে স্ক্রিপ্টটি এমন কিছু করার চেষ্টা করছে যা দেখতে (বিভিন্ন তারিখের বিন্যাসের গণিত) দেখাচ্ছে:

$dif = 1252809479 - 2009-09-12 20:57:19;

আমি কীভাবে আমার টাইমস্ট্যাম্পটিকে (ইউনিক্স?) ​​ফর্ম্যাটে রূপান্তর করতে যাব?



পিএইচপি এবং jQuery উদাহরণ এখানে freakyjolly.com
কোড স্পাই

উত্তর:


451

উদাহরণ ব্যবহার করুন:

echo time_elapsed_string('2013-05-01 00:22:35');
echo time_elapsed_string('@1367367755'); # timestamp input
echo time_elapsed_string('2013-05-01 00:22:35', true);

ইনপুট কোনও সমর্থিত তারিখ এবং সময় ফর্ম্যাট হতে পারে

আউটপুট:

4 months ago
4 months ago
4 months, 2 weeks, 3 days, 1 hour, 49 minutes, 15 seconds ago

ফাংশন:

function time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        'y' => 'year',
        'm' => 'month',
        'w' => 'week',
        'd' => 'day',
        'h' => 'hour',
        'i' => 'minute',
        's' => 'second',
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
        } else {
            unset($string[$k]);
        }
    }

    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' ago' : 'just now';
}

2
সপ্তাহের অংশটি দুর্দান্ত তবে সামগ্রিকভাবে ফাংশনটি আরও নমনীয় $fullহওয়া উচিত ( প্রয়োজন অনুযায়ী আউটপুট ফিল্টার করার জন্য স্ট্রিং ইনপুট হওয়া উচিত)। যেমন time_elapsed_string($datetime, $format = "ymw")। দ্রষ্টব্য ফ্ল্যাট সংস্করণ: stackoverflow.com/a/5010169/318765
mgutt

15
পরিবর্তন: আমার শেষ মন্তব্য প্রসঙ্গে $full = falseকরার $level = 7এবং if (!$full) $string = array_slice($string, 0, 1);করতে $string = array_slice($string, 0, $level);এবং কল time_elapsed_string($datetime, 2)মাত্র দুটি সর্বোচ্চ তারিখ স্ট্রিং প্রাপ্ত। আমি মনে করি এই শব্দটি সমস্ত প্রয়োজনের সাথে খাপ খায়।
মিলিগুট

1
@ এমগুট্ট: ofc এই ফাংশনটি কোনও ক্ষেত্রে-ব্যবহারকারী-চায়-দৃশ্যের জন্য কাজ করবে না; তবে এটি একটি দুর্দান্ত সূচনা পয়েন্ট, যেখানে আপনি ন্যূনতম
স্থিরতার সাথে

1
আমি Unknown property (w)এই লাইনে যাচ্ছি$diff->w = floor($diff->d / 7);
ভনউবিশ

2
Unknown property (w)পিএইচপি 5.3 এবং নীচে এই ইস্যুটির সমস্যাটি ঠিক করতে , কোনও বস্তুর থেকে $ ডিফকে একটি অ্যারেতে রূপান্তর করুন এবং সে অনুযায়ী বাকী কোডটি সামঞ্জস্য করুন। : আমি ফিক্স এখানে পোস্ট করেছেন stackoverflow.com/a/32723846/235633
bafromca

104
function time_elapsed_string($ptime)
{
    $etime = time() - $ptime;

    if ($etime < 1)
    {
        return '0 seconds';
    }

    $a = array( 365 * 24 * 60 * 60  =>  'year',
                 30 * 24 * 60 * 60  =>  'month',
                      24 * 60 * 60  =>  'day',
                           60 * 60  =>  'hour',
                                60  =>  'minute',
                                 1  =>  'second'
                );
    $a_plural = array( 'year'   => 'years',
                       'month'  => 'months',
                       'day'    => 'days',
                       'hour'   => 'hours',
                       'minute' => 'minutes',
                       'second' => 'seconds'
                );

    foreach ($a as $secs => $str)
    {
        $d = $etime / $secs;
        if ($d >= 1)
        {
            $r = round($d);
            return $r . ' ' . ($r > 1 ? $a_plural[$str] : $str) . ' ago';
        }
    }
}

73
এটি ভাল সমাধান নয়, যেহেতু এটি ব্যবহার করা হচ্ছে 30days for monthএবং 12x30days for yearএবং এর কারণেই এটি অবৈধ বছরের বেলন বছরটি ফিরে আসবে <= 1978। যেখানে এটি 39 বছর ফিরে আসে উদাহরণস্বরূপ , তবে এটি 38 হওয়া উচিত And এবং এটির জন্যও কাজ করে না বছর
বেলো

45
ভয়াবহ সমাধান। কেন এটিতে 42 টি upvotes এবং নির্বাচিত উত্তর রয়েছে? প্রতিমাসে কখন 30 দিন থাকে?
BadHorsie

5
@ ওয়াসিম্বয়, আপনি দয়া করে আমাকে বলতে পারেন আপনি আমার উত্তরটি কেন ভোট দিতে চান? আমার উত্তরটি যথেষ্ট ভাল না হলে আপনি ভোট না দিয়েই সংশোধন করার জন্য একটি মন্তব্য লিখতে পারেন।
আইমান হুসেন

8
আপনার উত্তরটি ভাল নয় কারণ এটি মাসে 30 দিন গণনা করে এবং সমস্ত মাসে 30 দিন থাকে না। উপরের অন্যান্য মন্তব্য পড়ুন।
টমাস গঞ্জালেজ

12
এটি একটি সাধারণ বাক্যটি ফিরিয়ে ফাংশন, যেমন "এই মন্তব্যটি প্রায় কত আগে হয়েছিল"? এটি সুনির্দিষ্ট নয় এবং উপরে কিছুটা পতন রয়েছে, যেমন উপরে বর্ণিত হয়েছে, তবে নিকট অতীতের তারিখগুলির জন্য (30 বছরের কাছাকাছি এবং তার চেয়ে কম কথা বলুন) এটি আমাদের অ-নির্ভুল মানুষকে ধারণা দেয় যে কোন ঘটনা কত আগে ঘটেছিল। আমার আবেদনের জন্য ভাল কাজ করেছে।
টিম ডিয়ারবোন

29
$time_elapsed = timeAgo($time_ago); //The argument $time_ago is in timestamp (Y-m-d H:i:s)format.

//Function definition

function timeAgo($time_ago)
{
    $time_ago = strtotime($time_ago);
    $cur_time   = time();
    $time_elapsed   = $cur_time - $time_ago;
    $seconds    = $time_elapsed ;
    $minutes    = round($time_elapsed / 60 );
    $hours      = round($time_elapsed / 3600);
    $days       = round($time_elapsed / 86400 );
    $weeks      = round($time_elapsed / 604800);
    $months     = round($time_elapsed / 2600640 );
    $years      = round($time_elapsed / 31207680 );
    // Seconds
    if($seconds <= 60){
        return "just now";
    }
    //Minutes
    else if($minutes <=60){
        if($minutes==1){
            return "one minute ago";
        }
        else{
            return "$minutes minutes ago";
        }
    }
    //Hours
    else if($hours <=24){
        if($hours==1){
            return "an hour ago";
        }else{
            return "$hours hrs ago";
        }
    }
    //Days
    else if($days <= 7){
        if($days==1){
            return "yesterday";
        }else{
            return "$days days ago";
        }
    }
    //Weeks
    else if($weeks <= 4.3){
        if($weeks==1){
            return "a week ago";
        }else{
            return "$weeks weeks ago";
        }
    }
    //Months
    else if($months <=12){
        if($months==1){
            return "a month ago";
        }else{
            return "$months months ago";
        }
    }
    //Years
    else{
        if($years==1){
            return "one year ago";
        }else{
            return "$years years ago";
        }
    }
}

আমি মনে করি না এটি একটি লক্ষণীয় পদ্ধতিতে প্রভাব ফেলবে। stackoverflow.com/questions/7895966/… তবে আমি বুঝতে পেরেছি যে সময় অতিবাহিত হওয়ার সাথে সাথে ইভেন্টটি ইতিমধ্যে "মাস আগে" বলেছে, এতে অনেকগুলি আইএফ (সেকেন্ড, মিনিট, ঘন্টা, দিন, সপ্তাহ) পরীক্ষা করতে হবে । সুতরাং আমি প্রস্তাব দিচ্ছি যে আপনি যদি অন্য বাইরের সাথে বিভাগগুলি যদি এটি ($ সেকেন্ড <= 604800) বলে থাকেন তবে আপনি এগুলি মোড়ানো করতে পারেন। মাস কয়েক আগের ক্ষেত্রে এই ক্ষেত্রে আরও 4 টি আইএফ পরীক্ষা করতে হবে না ... আবার, মাসের চেয়ে কম ক্ষেত্রে যদি অতিরিক্ত হয় তবে .... পছন্দটি আপনার।
ক্যাপ্টেন রেড

23

এটি আসলে একটি ভাল সমাধান আমি খুঁজে পেয়েছি। JQuery ব্যবহার করে তবে এটি পুরোপুরি কার্যকর হয়। এটাও স্বয়ংক্রিয়ভাবে সতেজ হয় SO এবং ফেসবুকের অনুরূপ যাতে আপডেটগুলি দেখার জন্য আপনাকে পৃষ্ঠাটি রিফ্রেশ করতে হবে না।

এই প্লাগইনটি আপনার datetimeঅ্যাটর্কে <time>ট্যাগটিতে পড়বে এবং আপনার জন্য এটি পূরণ করবে।

e.g. "4 minutes ago" or "about 1 day ago

http://timeago.yarp.com/


নিখুঁতভাবে কাজ করা এবং আইএসটি সময়ে কাঙ্ক্ষিত ফলাফলটি দেখানো
বিবেক

17

আমি জানি না কেন কার্বন এখনও কেউ উল্লেখ করেনি।

https://github.com/briannesbitt/Carbon

এটি আসলে পিএইচপি ডেটটাইম (যা ইতিমধ্যে এখানে ব্যবহৃত হয়েছিল) এর এক্সটেনশন এবং এটিতে রয়েছে: ডিফারফর্মহিউম্যানস পদ্ধতি। সুতরাং আপনাকে যা করতে হবে তা হ'ল:

$dt = Carbon::parse('2012-9-5 23:26:11.123789');
echo $dt->diffForHumans();

আরও উদাহরণ: http://carbon.nesbot.com/docs/#api-humandiff

এই সমাধানের পেশাদার:

  • এটি ভবিষ্যতের তারিখগুলির জন্য কাজ করে এবং 2 মাসের মতো কিছু ফেরত দেয় etc.
  • আপনি অন্যান্য ভাষাগুলি পেতে স্থানীয়করণ ব্যবহার করতে পারেন এবং বহুবচনটি দুর্দান্ত কাজ করে
  • আপনি যদি তারিখের সাথে কাজ করার জন্য অন্যান্য জিনিসগুলির জন্য কার্বন ব্যবহার শুরু করেন তবে তা কখনই সহজ হবে না।

11

আমি নিম্নলিখিত কদর্য মত ফলাফল পেয়েছি:

1 বছর, 2 মাস, 0 দিন, 0 ঘন্টা, 53 মিনিট এবং 1 সেকেন্ড

সে কারণে আমি এমন একটি ফাংশন উপলব্ধি করেছি যা বহুবচনগুলিকে সম্মান করে, খালি মানগুলি সরিয়ে দেয় এবং allyচ্ছিকভাবে আউটপুট সংক্ষিপ্ত করা সম্ভব:

function since($timestamp, $level=6) {
    global $lang;
    $date = new DateTime();
    $date->setTimestamp($timestamp);
    $date = $date->diff(new DateTime());
    // build array
    $since = array_combine(array('year', 'month', 'day', 'hour', 'minute', 'second'), explode(',', $date->format('%y,%m,%d,%h,%i,%s')));
    // remove empty date values
    $since = array_filter($since);
    // output only the first x date values
    $since = array_slice($since, 0, $level);
    // build string
    $last_key = key(array_slice($since, -1, 1, true));
    $string = '';
    foreach ($since as $key => $val) {
        // separator
        if ($string) {
            $string .= $key != $last_key ? ', ' : ' ' . $lang['and'] . ' ';
        }
        // set plural
        $key .= $val > 1 ? 's' : '';
        // add date value
        $string .= $val . ' ' . $lang[ $key ];
    }
    return $string;
}

অনেক বেশি ভাল দেখাচ্ছে:

1 বছর, 2 মাস, 53 মিনিট এবং 1 সেকেন্ড

$level = 2এটি নীচে সংক্ষিপ্ত করতে বিকল্পভাবে ব্যবহার করুন :

1 বছর 2 মাস

$langঅংশটি যদি আপনার কেবল ইংরেজিতে প্রয়োজন হয় তা সরিয়ে ফেলুন বা আপনার প্রয়োজন অনুসারে এই অনুবাদটি সম্পাদনা করুন:

$lang = array(
    'second' => 'Sekunde',
    'seconds' => 'Sekunden',
    'minute' => 'Minute',
    'minutes' => 'Minuten',
    'hour' => 'Stunde',
    'hours' => 'Stunden',
    'day' => 'Tag',
    'days' => 'Tage',
    'month' => 'Monat',
    'months' => 'Monate',
    'year' => 'Jahr',
    'years' => 'Jahre',
    'and' => 'und',
);

সর্বোপরি, এটি আমার পক্ষে ভাল কাজ করে। যদিও এটি আগে বা আগে যেতে দেখায় না, তবে উভয়ভাবেই কাজ করে। সহজ ফিক্স: যদি ($ তারিখ-> বিপরীত> 0) {$ সমাপ্তি = "যেতে"; } অন্য {$ সমাপ্তি = "পূর্বে"; } স্ট্রিংয়ের শেষে} কেবল যুক্ত করুন।
কোয়ান্টিন ক্যাম্পবেল

এখানে জসন ফাংশনগুলির ব্যবহার একটি বড় পারফরম্যান্স হিট এবং সম্পূর্ণ অপ্রয়োজনীয়। এটি একটি ভাল সমাধান নয়।
জম্বাট

@ জম্বাট আপনার মতামতের জন্য আপনাকে ধন্যবাদ। আমি explodeএবং এর বিরুদ্ধে লাইনটি পরিবর্তন করেছিarray_combine
মিগডাট

10
function humanTiming ($time)
        {

            $time = time() - $time; // to get the time since that moment
            $time = ($time<1)? 1 : $time;
            $tokens = array (
                31536000 => 'year',
                2592000 => 'month',
                604800 => 'week',
                86400 => 'day',
                3600 => 'hour',
                60 => 'minute',
                1 => 'second'
            );

            foreach ($tokens as $unit => $text) {
                if ($time < $unit) continue;
                $numberOfUnits = floor($time / $unit);
                return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
            }

        }

echo humanTiming( strtotime($mytimestring) );

1
এটি সত্যিই দুর্দান্ত। ভাগ করার জন্য আপনাকে ধন্যবাদ। তবে এমন উদাহরণ রয়েছে যেখানে ফাংশনটি returns সংখ্যাঅফুটগুলি খালি দেয় এবং এটি "পূর্বে" আউটপুট দেয়। আপাতদৃষ্টিতে মানটি 1 সেকেন্ডের চেয়ে কম বলে মনে হয় is এই পরিস্থিতিতে যদি আপনি "ঠিক এখন" এর মতো কিছুতে এটি ডিফল্ট করতে পারেন তবে এটি সঠিক।
হিজেরাক

6

আমি আসল ফাংশনটি হতে কিছুটা সংশোধন করেছি (আমার মতে আরও দরকারী, বা যৌক্তিক)।

// display "X time" ago, $rcs is precision depth
function time_ago ($tm, $rcs = 0) {
  $cur_tm = time(); 
  $dif = $cur_tm - $tm;
  $pds = array('second','minute','hour','day','week','month','year','decade');
  $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);

  for ($v = count($lngh) - 1; ($v >= 0) && (($no = $dif / $lngh[$v]) <= 1); $v--);
    if ($v < 0)
      $v = 0;
  $_tm = $cur_tm - ($dif % $lngh[$v]);

  $no = ($rcs ? floor($no) : round($no)); // if last denomination, round

  if ($no != 1)
    $pds[$v] .= 's';
  $x = $no . ' ' . $pds[$v];

  if (($rcs > 0) && ($v >= 1))
    $x .= ' ' . $this->time_ago($_tm, $rcs - 1);

  return $x;
}

একটি নির্দিষ্ট ক্যালেন্ডারের ভিত্তিতে গণিত ব্যবহার করে এমন কোনও ফাংশন মূলত ত্রুটিযুক্ত। তারিখ অবজেক্টটি ব্যবহার করুন, সময়ের সাথে গণিত করবেন না।
ক্রিস বেকার

2
@ ক্রিস-বেকার যখন বেশিরভাগ লোক এই ধরণের ফাংশন ব্যবহার করে, তখন দ্বিতীয়টির যথার্থতা আবশ্যক নয়। ফাংশনটি স্বল্প সময়ের জন্য সঠিক এবং দীর্ঘ সময় ধরে, কাছাকাছি থাকার পক্ষে যথেষ্ট ভাল।
বব ফিউড

5

আমি এটি তৈরি করেছি এবং এটি ঠিক কাজ করছে যে এটি ইউনিক্স টাইমস্ট্যাম্পের মতো 1470919932বা ফর্ম্যাটেড টাইমের মতো কাজ করে16-08-11 14:53:30

function timeAgo($time_ago) {
    $time_ago =  strtotime($time_ago) ? strtotime($time_ago) : $time_ago;
    $time  = time() - $time_ago;

switch($time):
// seconds
case $time <= 60;
return 'lessthan a minute ago';
// minutes
case $time >= 60 && $time < 3600;
return (round($time/60) == 1) ? 'a minute' : round($time/60).' minutes ago';
// hours
case $time >= 3600 && $time < 86400;
return (round($time/3600) == 1) ? 'a hour ago' : round($time/3600).' hours ago';
// days
case $time >= 86400 && $time < 604800;
return (round($time/86400) == 1) ? 'a day ago' : round($time/86400).' days ago';
// weeks
case $time >= 604800 && $time < 2600640;
return (round($time/604800) == 1) ? 'a week ago' : round($time/604800).' weeks ago';
// months
case $time >= 2600640 && $time < 31207680;
return (round($time/2600640) == 1) ? 'a month ago' : round($time/2600640).' months ago';
// years
case $time >= 31207680;
return (round($time/31207680) == 1) ? 'a year ago' : round($time/31207680).' years ago' ;

endswitch;
}

?>

না যে করা উচিত switch (true)যদিও $timeনির্ণয় করা হবে true?
মাভেলো

4

কেবল অন্য বিকল্পে ফেলে দিতে ...

আমি এখানে ডেটটাইম পদ্ধতি পোস্ট করা পছন্দ করি না কেন, আমি এটি 0 বছর ইত্যাদির মত প্রকাশ করি না like

/* 
 * Returns a string stating how long ago this happened
 */

private function timeElapsedString($ptime){
    $diff = time() - $ptime;
    $calc_times = array();
    $timeleft   = array();

    // Prepare array, depending on the output we want to get.
    $calc_times[] = array('Year',   'Years',   31557600);
    $calc_times[] = array('Month',  'Months',  2592000);
    $calc_times[] = array('Day',    'Days',    86400);
    $calc_times[] = array('Hour',   'Hours',   3600);
    $calc_times[] = array('Minute', 'Minutes', 60);
    $calc_times[] = array('Second', 'Seconds', 1);

    foreach ($calc_times AS $timedata){
        list($time_sing, $time_plur, $offset) = $timedata;

        if ($diff >= $offset){
            $left = floor($diff / $offset);
            $diff -= ($left * $offset);
            $timeleft[] = "{$left} " . ($left == 1 ? $time_sing : $time_plur);
        }
    }

    return $timeleft ? (time() > $ptime ? null : '-') . implode(' ', $timeleft) : 0;
}

2

এটি আপনাকে এটি পরীক্ষা করতে সহায়তা করে

   function calculate_time_span($seconds)
{  
 $year = floor($seconds /31556926);
$months = floor($seconds /2629743);
$week=floor($seconds /604800);
$day = floor($seconds /86400); 
$hours = floor($seconds / 3600);
 $mins = floor(($seconds - ($hours*3600)) / 60); 
$secs = floor($seconds % 60);
 if($seconds < 60) $time = $secs." seconds ago";
 else if($seconds < 3600 ) $time =($mins==1)?$mins."now":$mins." mins ago";
 else if($seconds < 86400) $time = ($hours==1)?$hours." hour ago":$hours." hours ago";
 else if($seconds < 604800) $time = ($day==1)?$day." day ago":$day." days ago";
 else if($seconds < 2629743) $time = ($week==1)?$week." week ago":$week." weeks ago";
 else if($seconds < 31556926) $time =($months==1)? $months." month ago":$months." months ago";
 else $time = ($year==1)? $year." year ago":$year." years ago";
return $time; 
}  
  $seconds = time() - strtotime($post->post_date); 
echo calculate_time_span($seconds); 

2

আমি সাধারণত currentএবং এর মধ্যে পার্থক্য খুঁজে বের করতে এটি ব্যবহার করিpassed datetime stamp

আউটপুট

//If difference is greater than 7 days
7 June 2019

// if difference is greater than 24 hours and less than 7 days
1 days ago
6 days ago

1 hour ago
23 hours ago

1 minute ago
58 minutes ago

1 second ago
20 seconds ago

কোড

//return current date time
function getCurrentDateTime(){
    //date_default_timezone_set("Asia/Calcutta");
    return date("Y-m-d H:i:s");
}
function getDateString($date){
    $dateArray = date_parse_from_format('Y/m/d', $date);
    $monthName = DateTime::createFromFormat('!m', $dateArray['month'])->format('F');
    return $dateArray['day'] . " " . $monthName  . " " . $dateArray['year'];
}

function getDateTimeDifferenceString($datetime){
    $currentDateTime = new DateTime(getCurrentDateTime());
    $passedDateTime = new DateTime($datetime);
    $interval = $currentDateTime->diff($passedDateTime);
    //$elapsed = $interval->format('%y years %m months %a days %h hours %i minutes %s seconds');
    $day = $interval->format('%a');
    $hour = $interval->format('%h');
    $min = $interval->format('%i');
    $seconds = $interval->format('%s');

    if($day > 7)
        return getDateString($datetime);
    else if($day >= 1 && $day <= 7 ){
        if($day == 1) return $day . " day ago";
        return $day . " days ago";
    }else if($hour >= 1 && $hour <= 24){
        if($hour == 1) return $hour . " hour ago";
        return $hour . " hours ago";
    }else if($min >= 1 && $min <= 60){
        if($min == 1) return $min . " minute ago";
        return $min . " minutes ago";
    }else if($seconds >= 1 && $seconds <= 60){
        if($seconds == 1) return $seconds . " second ago";
        return $seconds . " seconds ago";
    }
}

এর জন্য ধন্যবাদ. আমি আসলে এটি সি # কোডে রূপান্তর করেছি।
ড্যারালেক

অপরিজ্ঞাত ফাংশন getCenterDateTime ()
fyi

@gfivehost ফাংশন কোড যুক্ত করেছে, আপনি এখনই এটি পরীক্ষা করতে পারেন।
ভিকি সালুনখে

1

আমি জানি যে এখানে বেশ কয়েকটি উত্তর রয়েছে তবে আমি এগুলি নিয়ে এসেছি। আমি যে মূল প্রশ্নের উত্তর দিচ্ছিলাম সে অনুযায়ী এটি কেবল মাইএসকিউএল ডেটটাইম মানগুলি পরিচালনা করে। অ্যারে-এর কিছু কাজ দরকার। আমি কীভাবে উন্নতি করতে হবে তার মন্তব্যে স্বাগত জানাই। যেমন কল করুন:

প্রতিধ্বনি সময়_সিলভিত_আরক্ষক ('2014-11-14 09:42:28');

function time_elapsed_string($ptime)
{
    // Past time as MySQL DATETIME value
    $ptime = strtotime($ptime);

    // Current time as MySQL DATETIME value
    $csqltime = date('Y-m-d H:i:s');

    // Current time as Unix timestamp
    $ctime = strtotime($csqltime); 

    // Elapsed time
    $etime = $ctime - $ptime;

    // If no elapsed time, return 0
    if ($etime < 1){
        return '0 seconds';
    }

    $a = array( 365 * 24 * 60 * 60  =>  'year',
                 30 * 24 * 60 * 60  =>  'month',
                      24 * 60 * 60  =>  'day',
                           60 * 60  =>  'hour',
                                60  =>  'minute',
                                 1  =>  'second'
    );

    $a_plural = array( 'year'   => 'years',
                       'month'  => 'months',
                       'day'    => 'days',
                       'hour'   => 'hours',
                       'minute' => 'minutes',
                       'second' => 'seconds'
    );

    foreach ($a as $secs => $str){
        // Divide elapsed time by seconds
        $d = $etime / $secs;
        if ($d >= 1){
            // Round to the next lowest integer 
            $r = floor($d);
            // Calculate time to remove from elapsed time
            $rtime = $r * $secs;
            // Recalculate and store elapsed time for next loop
            if(($etime - $rtime)  < 0){
                $etime -= ($r - 1) * $secs;
            }
            else{
                $etime -= $rtime;
            }
            // Create string to return
            $estring = $estring . $r . ' ' . ($r > 1 ? $a_plural[$str] : $str) . ' ';
        }
    }
    return $estring . ' ago';
}

1

আমি এটি চেষ্টা করেছিলাম এবং আমার পক্ষে ভাল কাজ করি

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-10');
$difference = $datetime1->diff($datetime2);
echo formatOutput($difference);

function formatOutput($diff){
    /* function to return the highrst defference fount */
    if(!is_object($diff)){
        return;
    }

    if($diff->y > 0){
        return $diff->y .(" year".($diff->y > 1?"s":"")." ago");
    }

    if($diff->m > 0){
        return $diff->m .(" month".($diff->m > 1?"s":"")." ago");
    }

    if($diff->d > 0){
        return $diff->d .(" day".($diff->d > 1?"s":"")." ago");
    }

    if($diff->h > 0){
        return $diff->h .(" hour".($diff->h > 1?"s":"")." ago");
    }

    if($diff->i > 0){
        return $diff->i .(" minute".($diff->i > 1?"s":"")." ago");
    }

    if($diff->s > 0){
        return $diff->s .(" second".($diff->s > 1?"s":"")." ago");
    }
}

রেফারেন্সের জন্য এই লিঙ্কটি এখানে দেখুন

ধন্যবাদ! এবং মজা করো.


1

এই যে আমি সঙ্গে গিয়েছিলাম। এটি আব্বাস খানের পোস্টের একটি পরিবর্তিত সংস্করণ:

<?php

  function calculate_time_span($post_time)
  {  
  $seconds = time() - strtotime($post);
  $year = floor($seconds /31556926);
  $months = floor($seconds /2629743);
  $week=floor($seconds /604800);
  $day = floor($seconds /86400); 
  $hours = floor($seconds / 3600);
  $mins = floor(($seconds - ($hours*3600)) / 60); 
  $secs = floor($seconds % 60);
  if($seconds < 60) $time = $secs." seconds ago";
  else if($seconds < 3600 ) $time =($mins==1)?$mins."now":$mins." mins ago";
  else if($seconds < 86400) $time = ($hours==1)?$hours." hour ago":$hours." hours ago";
  else if($seconds < 604800) $time = ($day==1)?$day." day ago":$day." days ago";
  else if($seconds < 2629743) $time = ($week==1)?$week." week ago":$week." weeks ago";
  else if($seconds < 31556926) $time =($months==1)? $months." month ago":$months." months ago";
  else $time = ($year==1)? $year." year ago":$year." years ago";
  return $time; 
  }  



 // uses
 // $post_time="2017-12-05 02:05:12";
 // echo calculate_time_span($post_time); 

1

এখানে অনেকগুলি সমাধান বৃত্তাকার জন্য অ্যাকাউন্ট করে না। উদাহরণ স্বরূপ:

ঘটনাটি ঘটেছে দুদিন আগে বেলা তিনটায়। আপনি যদি দুপুর ২ টায় যাচাই করে থাকেন তবে এটি একদিন আগে প্রদর্শিত হবে। আপনি যদি সন্ধ্যা 4 টায় যাচাই করেন তবে এটি দুদিন আগে প্রদর্শিত হবে।

আপনি যদি ইউনিক্স সময় নিয়ে কাজ করে থাকেন তবে এটি সহায়তা করে:

// how long since event has passed in seconds
$secs = time() - $time_ago;

// how many seconds in a day
$sec_per_day = 60*60*24;

// days elapsed
$days_elapsed = floor($secs / $sec_per_day);

// how many seconds passed today
$today_seconds = date('G')*3600 + date('i') * 60 + date('s');

// how many seconds passed in the final day calculation
$remain_seconds = $secs % $sec_per_day;

if($today_seconds < $remain_seconds)
{
    $days_elapsed++;
}

echo 'The event was '.$days_ago.' days ago.';

লিপ সেকেন্ড এবং দিবালোকের সঞ্চয় সময় সম্পর্কে আপনি যদি উদ্বিগ্ন থাকেন তবে এটি সঠিক নয়।


1

এটি ব্যবহার করে দেখুন, আমি আমার পুরানো কোডগুলি থেকে এটি পেয়েছি, যা সঠিক ফলাফল দেখায়

function ago($datefrom, $dateto = -1) {
    // Defaults and assume if 0 is passed in that
    // its an error rather than the epoch

    if ($datefrom == 0) {
        return "A long time ago";
    }
    if ($dateto == -1) {
        $dateto = time();
    }

    // Make the entered date into Unix timestamp from MySQL datetime field

    $datefrom = strtotime($datefrom);

    // Calculate the difference in seconds betweeen
    // the two timestamps

    $difference = $dateto - $datefrom;

    // Based on the interval, determine the
    // number of units between the two dates
    // From this point on, you would be hard
    // pushed telling the difference between
    // this function and DateDiff. If the $datediff
    // returned is 1, be sure to return the singular
    // of the unit, e.g. 'day' rather 'days'

    switch (true) {
        // If difference is less than 60 seconds,
        // seconds is a good interval of choice
        case(strtotime('-1 min', $dateto) < $datefrom):
            $datediff = $difference;
            $res = ($datediff == 1) ? $datediff . ' second' : $datediff . ' seconds';
            break;
        // If difference is between 60 seconds and
        // 60 minutes, minutes is a good interval
        case(strtotime('-1 hour', $dateto) < $datefrom):
            $datediff = floor($difference / 60);
            $res = ($datediff == 1) ? $datediff . ' minute' : $datediff . ' minutes';
            break;
        // If difference is between 1 hour and 24 hours
        // hours is a good interval
        case(strtotime('-1 day', $dateto) < $datefrom):
            $datediff = floor($difference / 60 / 60);
            $res = ($datediff == 1) ? $datediff . ' hour' : $datediff . ' hours';
            break;
        // If difference is between 1 day and 7 days
        // days is a good interval                
        case(strtotime('-1 week', $dateto) < $datefrom):
            $day_difference = 1;
            while (strtotime('-' . $day_difference . ' day', $dateto) >= $datefrom) {
                $day_difference++;
            }

            $datediff = $day_difference;
            $res = ($datediff == 1) ? 'yesterday' : $datediff . ' days';
            break;
        // If difference is between 1 week and 30 days
        // weeks is a good interval            
        case(strtotime('-1 month', $dateto) < $datefrom):
            $week_difference = 1;
            while (strtotime('-' . $week_difference . ' week', $dateto) >= $datefrom) {
                $week_difference++;
            }

            $datediff = $week_difference;
            $res = ($datediff == 1) ? 'last week' : $datediff . ' weeks';
            break;
        // If difference is between 30 days and 365 days
        // months is a good interval, again, the same thing
        // applies, if the 29th February happens to exist
        // between your 2 dates, the function will return
        // the 'incorrect' value for a day
        case(strtotime('-1 year', $dateto) < $datefrom):
            $months_difference = 1;
            while (strtotime('-' . $months_difference . ' month', $dateto) >= $datefrom) {
                $months_difference++;
            }

            $datediff = $months_difference;
            $res = ($datediff == 1) ? $datediff . ' month' : $datediff . ' months';

            break;
        // If difference is greater than or equal to 365
        // days, return year. This will be incorrect if
        // for example, you call the function on the 28th April
        // 2008 passing in 29th April 2007. It will return
        // 1 year ago when in actual fact (yawn!) not quite
        // a year has gone by
        case(strtotime('-1 year', $dateto) >= $datefrom):
            $year_difference = 1;
            while (strtotime('-' . $year_difference . ' year', $dateto) >= $datefrom) {
                $year_difference++;
            }

            $datediff = $year_difference;
            $res = ($datediff == 1) ? $datediff . ' year' : $datediff . ' years';
            break;
    }
    return $res;
}

উদাহরণ: echo ago('2020-06-03 00:14:21 AM');

আউটপুট: 6 days


0

আপনাকে নিজের টাইমস্ট্যাম্পের প্রতিটি স্বতন্ত্র টুকরো নিতে হবে এবং এটিকে ইউনিক্স সময়ে রূপান্তর করতে হবে। টাইমস্ট্যাম্পের জন্য উদাহরণস্বরূপ, ২০০৯-০৯-১২ 20:57:19 :19

(((২০০-19-১7070০) * ৩5৫) + (৮ * ৩০) +১২) * ২৪ + ২০ আপনাকে ১ লা জানুয়ারী, ১৯ 1970০ সাল থেকে এক ঘন্টার জন্য একটি মোটামুটি প্রাক্কলন দেয়।

এই সংখ্যাটি নিন, 60 দিয়ে গুণ করুন এবং মিনিটগুলি পেতে 57 যুক্ত করুন।

এটি নিন, 60 দিয়ে গুণ এবং 19 যোগ করুন।

তবে এটি একেবারে মোটামুটি এবং ভুলভাবে রূপান্তরিত করবে।

এমন কোনও কারণ আছে যা আপনি শুরু করতে সাধারণ ইউনিক্স সময় নিতে পারেন না?


স্কেল টেবিলটিতে ইউনিক্স সময় হিসাবে সংরক্ষণ করা ভাল? আমি বর্তমানে টাইমস্ট্যাম্প কলামে (যা ইউনিক্সে পরিবর্তিত হতে পারে) মাইএসকিএলএস স্বয়ংক্রিয় টাইমস্ট্যাম্প আপডেট ব্যবহার করছি। আমি শুধু আরও ভাল কি শিখছি?
willdanceforfun

স্পষ্টভাবে. আমি বিশ্বাস করি যে কোনও মাইএসকিউএল টেবিলের জন্য ডিফল্টটি আপনি যে ধরণের রেফারেন্স করেছেন তা কিন্তু ইউনিক্স সময়টি আরও বেশি ব্যবহারিক। আপনি এটি সর্বদা একটি int হিসাবে সংরক্ষণ করতে পারেন।
লুক ওয়ার্ম 74

তারিখটিকে ইউনিক্স ফর্ম্যাটে রূপান্তর করতে আপনার ডাটাবেসের একটি ফাংশন থাকা উচিত। মাইএসকিএলে আপনি UNIX_TIMESTAMP () ব্যবহার করেন। ওহ, এবং আপনার সাধারণত আপনার তারিখগুলি আইএনটি-র পরিবর্তে DATETIMEs হিসাবে সংরক্ষণ করা উচিত, যাতে আপনি তারিখের ম্যানিপুলেশনের জন্য বেকার ফাংশন ব্যবহার করতে পারেন।
CpnCrunch

আপনার কখনই সময় মতো গণিত ব্যবহার করা উচিত নয়। আপনি একটি স্থির ক্যালেন্ডার ধরে নিচ্ছেন, যা বিদ্যমান নেই। ... তারিখগুলির সাথে কাজ করতে পিএইচপিতে প্রদত্ত তারিখ অবজেক্টটি ব্যবহার করুন।
ক্রিস বেকার

0

কিছু ভাষা প্রদর্শনের সময় আগে এখানে কিছু সমস্যা রয়েছে উদাহরণস্বরূপ আরবিতে সেখানে তারিখ প্রদর্শনের জন্য 3 টি ফর্ম্যাট প্রয়োজন। আমি আমার প্রকল্পগুলিতে এই ফাংশনগুলি ব্যবহার করি আশা করি তারা কাউকে সহায়তা করতে পারে (কোনও পরামর্শ বা উন্নতি আমি প্রশংসা করব :))

/**
 *
 * @param   string $date1 
 * @param   string $date2 the date that you want to compare with $date1
 * @param   int $level  
 * @param   bool $absolute  
 */

function app_date_diff( $date1, $date2, $level = 3, $absolute = false ) {

    $date1 = date_create($date1);   
    $date2 = date_create($date2);
    $diff = date_diff( $date1, $date2, $absolute );

    $d = [
        'invert' => $diff->invert
    ];  

    $diffs = [
        'y' => $diff->y, 
        'm' => $diff->m, 
        'd' => $diff->d
    ];

    $level_reached = 0;

    foreach($diffs as $k=>$v) {

        if($level_reached >= $level) {
            break;
        }

        if($v > 0) {
            $d[$k] = $v;
            $level_reached++;
        }

    }

    return  $d;

}

/**
 * 
 */

function date_timestring( $periods, $format = 'latin', $separator = ',' ) {

    $formats = [
        'latin' => [
            'y' => ['year','years'],
            'm' => ['month','months'],
            'd' => ['day','days']
        ],
        'arabic' => [
            'y' => ['سنة','سنتين','سنوات'],
            'm' => ['شهر','شهرين','شهور'],
            'd' => ['يوم','يومين','أيام']
        ]
    ];

    $formats = $formats[$format];

    $string = [];

    foreach($periods as $period=>$value) {

        if(!isset($formats[$period])) {
            continue;
        }

        $string[$period] = $value.' ';
        if($format == 'arabic') {
            if($value == 2) {
                $string[$period] = $formats[$period][1];
            }elseif($value > 2 && $value <= 10) {
                $string[$period] .= $formats[$period][2];
            }else{
                $string[$period] .= $formats[$period][0];
            }

        }elseif($format == 'latin') {
            $string[$period] .= ($value > 1) ? $formats[$period][1] : $formats[$period][0];
        }

    }

    return implode($separator, $string);


}

function timeago( $date ) {

    $today = date('Y-m-d h:i:s');

    $diff = app_date_diff($date,$today,2);

    if($diff['invert'] == 1) {
        return '';
    }

    unset($diff[0]);

    $date_timestring = date_timestring($diff,'latin');

    return 'About '.$date_timestring;

}

$date1 = date('Y-m-d');
$date2 = '2018-05-14';

$diff = timeago($date2);
echo $diff;

-1
$time_ago = ' ';
$time = time() - $time; // to get the time since that moment
$tokens = array (
31536000 => 'year',2592000 => 'month',604800 => 'week',86400 => 'day',3600 => 'hour',
60  => 'minute',1 => 'second');
foreach ($tokens as $unit => $text) {
if ($time < $unit)continue;
$numberOfUnits = floor($time / $unit);
$time_ago = ' '.$time_ago. $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'').'  ';
$time = $time % $unit;}echo $time_ago;

-1

এখানে আমার সমাধানটি দয়া করে আপনার প্রয়োজনীয়তাগুলি পরীক্ষা করুন এবং সংশোধন করুন

function getHowLongAgo($date, $display = array('Year', 'Month', 'Day', 'Hour', 'Minute', 'Second'), $ago = '') {
        date_default_timezone_set('Australia/Sydney');
        $timestamp = strtotime($date);
        $timestamp = (int) $timestamp;
        $current_time = time();
        $diff = $current_time - $timestamp;

        //intervals in seconds
        $intervals = array(
            'year' => 31556926, 'month' => 2629744, 'week' => 604800, 'day' => 86400, 'hour' => 3600, 'minute' => 60
        );

        //now we just find the difference
        if ($diff == 0) {
            return ' Just now ';
        }

        if ($diff < 60) {
            return $diff == 1 ? $diff . ' second ago ' : $diff . ' seconds ago ';
        }

        if ($diff >= 60 && $diff < $intervals['hour']) {
            $diff = floor($diff / $intervals['minute']);
            return $diff == 1 ? $diff . ' minute ago ' : $diff . ' minutes ago ';
        }

        if ($diff >= $intervals['hour'] && $diff < $intervals['day']) {
            $diff = floor($diff / $intervals['hour']);
            return $diff == 1 ? $diff . ' hour ago ' : $diff . ' hours ago ';
        }

        if ($diff >= $intervals['day'] && $diff < $intervals['week']) {
            $diff = floor($diff / $intervals['day']);
            return $diff == 1 ? $diff . ' day ago ' : $diff . ' days ago ';
        }

        if ($diff >= $intervals['week'] && $diff < $intervals['month']) {
            $diff = floor($diff / $intervals['week']);
            return $diff == 1 ? $diff . ' week ago ' : $diff . ' weeks ago ';
        }

        if ($diff >= $intervals['month'] && $diff < $intervals['year']) {
            $diff = floor($diff / $intervals['month']);
            return $diff == 1 ? $diff . ' month ago ' : $diff . ' months ago ';
        }

        if ($diff >= $intervals['year']) {
            $diff = floor($diff / $intervals['year']);
            return $diff == 1 ? $diff . ' year ago ' : $diff . ' years ago ';
        }
    }

ধন্যবাদ


-1
# This function prints the difference between two php datetime objects
# in a more human readable form
# inputs should be like strtotime($date)
function humanizeDateDiffference($now,$otherDate=null,$offset=null){
    if($otherDate != null){
        $offset = $now - $otherDate;
    }
    if($offset != null){
        $deltaS = $offset%60;
        $offset /= 60;
        $deltaM = $offset%60;
        $offset /= 60;
        $deltaH = $offset%24;
        $offset /= 24;
        $deltaD = ($offset > 1)?ceil($offset):$offset;      
    } else{
        throw new Exception("Must supply otherdate or offset (from now)");
    }
    if($deltaD > 1){
        if($deltaD > 365){
            $years = ceil($deltaD/365);
            if($years ==1){
                return "last year"; 
            } else{
                return "<br>$years years ago";
            }   
        }
        if($deltaD > 6){
            return date('d-M',strtotime("$deltaD days ago"));
        }       
        return "$deltaD days ago";
    }
    if($deltaD == 1){
        return "Yesterday";
    }
    if($deltaH == 1){
        return "last hour";
    }
    if($deltaM == 1){
        return "last minute";
    }
    if($deltaH > 0){
        return $deltaH." hours ago";
    }
    if($deltaM > 0){
        return $deltaM." minutes ago";
    }
    else{
        return "few seconds ago";
    }
}

-1

এই ফাংশনটি ইংরেজী ভাষার জন্য ব্যবহৃত হতে পারে না। আমি শব্দগুলি ইংরেজিতে অনুবাদ করেছি translated ইংরেজী ব্যবহারের আগে এটি আরও ফিক্সিংয়ের প্রয়োজন।

function ago($d) {
$ts = time() - strtotime(str_replace("-","/",$d));

        if($ts>315360000) $val = round($ts/31536000,0).' year';
        else if($ts>94608000) $val = round($ts/31536000,0).' years';
        else if($ts>63072000) $val = ' two years';
        else if($ts>31536000) $val = ' a year';

        else if($ts>24192000) $val = round($ts/2419200,0).' month';
        else if($ts>7257600) $val = round($ts/2419200,0).' months';
        else if($ts>4838400) $val = ' two months';
        else if($ts>2419200) $val = ' a month';


        else if($ts>6048000) $val = round($ts/604800,0).' week';
        else if($ts>1814400) $val = round($ts/604800,0).' weeks';
        else if($ts>1209600) $val = ' two weeks';
        else if($ts>604800) $val = ' a week';

        else if($ts>864000) $val = round($ts/86400,0).' day';
        else if($ts>259200) $val = round($ts/86400,0).' days';
        else if($ts>172800) $val = ' two days';
        else if($ts>86400) $val = ' a day';

        else if($ts>36000) $val = round($ts/3600,0).' year';
        else if($ts>10800) $val = round($ts/3600,0).' years';
        else if($ts>7200) $val = ' two years';
        else if($ts>3600) $val = ' a year';

        else if($ts>600) $val = round($ts/60,0).' minute';
        else if($ts>180) $val = round($ts/60,0).' minutes';
        else if($ts>120) $val = ' two minutes';
        else if($ts>60) $val = ' a minute';

        else if($ts>10) $val = round($ts,0).' second';
        else if($ts>2) $val = round($ts,0).' seconds';
        else if($ts>1) $val = ' two seconds';
        else $val = $ts.' a second';


        return $val;
    }

-1

ব্যাবহার:

echo elapsed_time('2016-05-09 17:00:00'); // 18 saat 8 dakika önce yazıldı.

ফাংশন:

function elapsed_time($time){// Nekadar zaman geçmiş

        $diff = time() - strtotime($time); 

        $sec = $diff;
        $min = floor($diff/60);
        $hour = floor($diff/(60*60));
        $hour_min = floor($min - ($hour*60));
        $day = floor($diff/(60*60*24));
        $day_hour = floor($hour - ($day*24));
        $week = floor($diff/(60*60*24*7));
        $mon = floor($diff/(60*60*24*7*4));
        $year = floor($diff/(60*60*24*7*4*12));

        //difference calculate to string
        if($sec < (60*5)){
            return 'şimdi yazıldı.';
        }elseif($min < 60){
            return 'biraz önce yazıldı.';
        }elseif($hour < 24){
            return $hour.' saat '.$hour_min.' dakika önce yazıldı.';
        }elseif($day < 7){
            if($day_hour!=0){$day_hour=$day_hour.' saat ';}else{$day_hour='';}
            return $day.' gün '.$day_hour.'önce yazıldı.';
        }elseif($week < 4){
            return $week.' hafta önce yazıldı.';
        }elseif($mon < 12){
            return $mon.' ay önce yazıldı.';
        }else{
            return $year.' yıl önce yazıldı.';
        }
    }

এক মাস ২৮ দিনের বেশি, এক বছর ৫২ সপ্তাহের বেশি।
অগওয়া

-1

উপরে থেকে সামান্য পরিবর্তিত উত্তর:

  $commentTime = strtotime($whatever)
  $today       = strtotime('today');
  $yesterday   = strtotime('yesterday');
  $todaysHours = strtotime('now') - strtotime('today');

private function timeElapsedString(
    $commentTime,
    $todaysHours,
    $today,
    $yesterday
) {
    $tokens = array(
        31536000 => 'year',
        2592000 => 'month',
        604800 => 'week',
        86400 => 'day',
        3600 => 'hour',
        60 => 'minute',
        1 => 'second'
    );
    $time = time() - $commentTime;
    $time = ($time < 1) ? 1 : $time;
    if ($commentTime >= $today || $commentTime < $yesterday) {
        foreach ($tokens as $unit => $text) {
            if ($time < $unit) {
                continue;
            }
            if ($text == 'day') {
                $numberOfUnits = floor(($time - $todaysHours) / $unit) + 1;
            } else {
                $numberOfUnits = floor(($time)/ $unit);
            }
            return $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '') . ' ago';
        }
    } else {
        return 'Yesterday';
    }
}

-2

নিম্নলিখিতটি একটি খুব সাধারণ এবং অত্যন্ত দক্ষ সমাধান।

function timeElapsed($originalTime){

        $timeElapsed=time()-$originalTime;

        /*
          You can change the values of the following 2 variables 
          based on your opinion. For 100% accuracy, you can call
          php's cal_days_in_month() and do some additional coding
          using the values you get for each month. After all the
          coding, your final answer will be approximately equal to
          mine. That is why it is okay to simply use the average
          values below.
        */
        $averageNumbDaysPerMonth=(365.242/12);
        $averageNumbWeeksPerMonth=($averageNumbDaysPerMonth/7);

        $time1=(((($timeElapsed/60)/60)/24)/365.242);
        $time2=floor($time1);//Years
        $time3=($time1-$time2)*(365.242);
        $time4=($time3/$averageNumbDaysPerMonth);
        $time5=floor($time4);//Months
        $time6=($time4-$time5)*$averageNumbWeeksPerMonth;
        $time7=floor($time6);//Weeks
        $time8=($time6-$time7)*7;
        $time9=floor($time8);//Days
        $time10=($time8-$time9)*24;
        $time11=floor($time10);//Hours
        $time12=($time10-$time11)*60;
        $time13=floor($time12);//Minutes
        $time14=($time12-$time13)*60;
        $time15=round($time14);//Seconds

        $timeElapsed=$time2 . 'yrs ' . $time5 . 'months ' . $time7 . 
                     'weeks ' . $time9 .  'days ' . $time11 . 'hrs '
                     . $time13 . 'mins and ' . $time15 . 'secs.';

        return $timeElapsed;

}

প্রতিধ্বনির সময় অতিবাহিত (1201570814);

নমুনা আউটপুট:

6 বছর 4 মাস, 3 সপ্তাহ 4 দিন 12 ঘন্টা 40 মিনিট এবং 36 সেকেন্ড।


-2

কিছুক্ষণ আগে আমি তৈরি করা একটি বিজ্ঞপ্তি মডিউলটির জন্য আমার সমাধান এখানে। এটি ফেসবুকের বিজ্ঞপ্তি ড্রপডাউনের অনুরূপ আউটপুট ফেরত দেয় (উদাঃ 1 দিন আগে, ঠিক এখন, ইত্যাদি)।

public function getTimeDifference($time) {
    //Let's set the current time
    $currentTime = date('Y-m-d H:i:s');
    $toTime = strtotime($currentTime);

    //And the time the notification was set
    $fromTime = strtotime($time);

    //Now calc the difference between the two
    $timeDiff = floor(abs($toTime - $fromTime) / 60);

    //Now we need find out whether or not the time difference needs to be in
    //minutes, hours, or days
    if ($timeDiff < 2) {
        $timeDiff = "Just now";
    } elseif ($timeDiff > 2 && $timeDiff < 60) {
        $timeDiff = floor(abs($timeDiff)) . " minutes ago";
    } elseif ($timeDiff > 60 && $timeDiff < 120) {
        $timeDiff = floor(abs($timeDiff / 60)) . " hour ago";
    } elseif ($timeDiff < 1440) {
        $timeDiff = floor(abs($timeDiff / 60)) . " hours ago";
    } elseif ($timeDiff > 1440 && $timeDiff < 2880) {
        $timeDiff = floor(abs($timeDiff / 1440)) . " day ago";
    } elseif ($timeDiff > 2880) {
        $timeDiff = floor(abs($timeDiff / 1440)) . " days ago";
    }

    return $timeDiff;
}

-2

শুধু এই চমকপ্রদ তারিখ সময় পাস। এটি আপনার জন্য সময়ের আগে ফর্ম্যাটে মুদ্রণ করবে

date_default_timezone_set('your-time-zone');
function convert($datetime){
  $time=strtotime($datetime);
  $diff=time()-$time;
  $diff/=60;
  $var1=floor($diff);
  $var=$var1<=1 ? 'min' : 'mins';
  if($diff>=60){
    $diff/=60;
    $var1=floor($diff);
    $var=$var1<=1 ? 'hr' : 'hrs';
    if($diff>=24){$diff/=24;$var1=floor($diff);$var=$var1<=1 ? 'day' : 'days';
    if($diff>=30.4375){$diff/=30.4375;$var1=floor($diff);$var=$var1<=1 ? 'month' : 'months';
    if($diff>=12){$diff/=12;$var1=floor($diff);$var=$var1<=1 ? 'year' : 'years';}}}}
    echo $var1,' ',$var,' ago';
  }

-3

আমি কয়েক বছর ধরে নিম্নলিখিত ফাংশনটি ব্যবহার করছি। এবং এটি ঠিক কাজ করছে:

function timeDifference($timestamp)
{
    $otherDate=$timestamp;
    $now=@date("Y-m-d H:i:s");

    $secondDifference=@strtotime($now)-@strtotime($otherDate);
    $extra="";
    if ($secondDifference == 2592000) { 
    // months 
    $difference = $secondDifference/2592000; 
    $difference = round($difference,0); 
    if ($difference>1) { $extra="s"; } 
    $difference = $difference." month".$extra." ago"; 
}else if($secondDifference > 2592000)
    {$difference=timestamp($timestamp);} 
elseif ($secondDifference >= 604800) { 
    // weeks 
    $difference = $secondDifference/604800; 
    $difference = round($difference,0); 
    if ($difference>1) { $extra="s"; } 
    $difference = $difference." week".$extra." ago"; 
} 
elseif ($secondDifference >= 86400) { 
    // days 
    $difference = $secondDifference/86400; 
    $difference = round($difference,0); 
    if ($difference>1) { $extra="s"; } 
    $difference = $difference." day".$extra." ago"; 
} 
elseif ($secondDifference >= 3600) { 
    // hours 

    $difference = $secondDifference/3600; 
    $difference = round($difference,0); 
    if ($difference>1) { $extra="s"; } 
    $difference = $difference." hour".$extra." ago"; 
} 
elseif ($secondDifference < 3600) { 
    // hours 
    // for seconds (less than minute)
    if($secondDifference<=60)
    {       
        if($secondDifference==0)
        {
            $secondDifference=1;
        }
        if ($secondDifference>1) { $extra="s"; }
        $difference = $secondDifference." second".$extra." ago"; 

    }
    else
    {

$difference = $secondDifference/60; 
        if ($difference>1) { $extra="s"; }else{$extra="";}
        $difference = round($difference,0); 
        $difference = $difference." minute".$extra." ago"; 
    }
} 

$FinalDifference = $difference; 
return $FinalDifference;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.