কীভাবে পিএইচপিতে মিনিটের মধ্যে সময় পার্থক্য পাবেন


উত্তর:


92

ভবিষ্যতের সর্বাধিক এক থেকে অতীতকে বিয়োগ করুন এবং 60 দ্বারা ভাগ করুন।

টাইমস ইউনিক্স ফর্ম্যাটে সম্পন্ন হয় যাতে তারা সেকেন্ডের সংখ্যাটি দেখায় মাত্র একটি বড় সংখ্যা January 1, 1970, 00:00:00 GMT


1
@ জেরাল্ড কীভাবে এই সমাধান আপনার জন্য কাজ করে? আপনি কি কমপক্ষে কিছুটা সংক্ষেপে কিছু মনে করেন? ধন্যবাদ।
ওয়াফি আলী

7
@ ওয়াফিএলি $ n অন্তরওয়াল = স্ট্রোটোটাইম (D sDate2) - স্ট্রোটোটাইম (D sDate1); এটি সেকেন্ডের মধ্যে সময়ের পার্থক্যটি ফিরিয়ে দেবে, তারপরে আপনি কেবল 60 টির মতো ভাগ করতে পারবেন। ; n অন্তর্বর্তী = $ n অন্তর্বর্তী / 60;
জেরাল্ড

কী করা দরকার তা ব্যাখ্যা করার জন্য এবং অকেজো ডেট ইন্টেরওয়াল ক্লাসটি ব্যবহার না করে যা করার জন্য কোনও পদ্ধতি নেই: কয়েক মিনিটের ব্যবধানে পার্থক্য ।
AndreKR

404

উপরের উত্তরগুলি পিএইচপি-র পুরানো সংস্করণগুলির জন্য। যে কোনও তারিখ গণনা করতে ডেটটাইম ক্লাস ব্যবহার করুন এখন পিএইচপি 5.3 আদর্শ। যেমন।

$start_date = new DateTime('2007-09-01 04:10:58');
$since_start = $start_date->diff(new DateTime('2012-09-11 10:25:00'));
echo $since_start->days.' days total<br>';
echo $since_start->y.' years<br>';
echo $since_start->m.' months<br>';
echo $since_start->d.' days<br>';
echo $since_start->h.' hours<br>';
echo $since_start->i.' minutes<br>';
echo $since_start->s.' seconds<br>';

$ যেহেতু_স্টার্টটি একটি তারিখের অন্তর্গত অবজেক্ট। নোট করুন যে দিনগুলির সম্পত্তি উপলব্ধ (কারণ আমরা ডেটটাইম ক্লাসের বিভিন্ন পদ্ধতি ব্যবহার করে ডেটইন্টারভাল অবজেক্ট তৈরি করি)।

উপরের কোডটি আউটপুট দেবে:

1837 দিন মোট
5 বছর
0 মাস
10 দিন
6 ঘন্টা
14 মিনিট
2 সেকেন্ড

মিনিটের মোট সংখ্যা পেতে:

$minutes = $since_start->days * 24 * 60;
$minutes += $since_start->h * 60;
$minutes += $since_start->i;
echo $minutes.' minutes';

এটি আউটপুট দেবে:

2645654 মিনিট

যা দুটি তারিখের মধ্যে কেটে গেছে এমন আসল সংখ্যা। ডেটটাইম শ্রেণি দিবালোক সংরক্ষণ (টাইমজোন উপর নির্ভর করে) অ্যাকাউন্টে গ্রহণ করবে যেখানে "পুরানো উপায়" তা করবে না। তারিখ এবং সময় সম্পর্কে ম্যানুয়ালটি পড়ুন http://www.php.net/manual/en/book.datetime.php


12
পিট্টি ডেটইন্টারভাল এর মতো পদ্ধতি inSeconds()বা অনুরূপ কিছু নেই, এখন সেকেন্ডের মধ্যে পার্থক্য গণনা করতে আমার যেখানেই কোড পুনরাবৃত্তি দরকার।
মারিয়াস বালিয়েটিস

5
@ বারিয়াস বা আপনি এমন একটি ফাংশন লিখতে পারেন যা পুনরাবৃত্তি কোডটি গুটিয়ে রাখে বা ডেটটাইম প্রসারিত করে এবং আপনার কোডটি পুনরায় না করে।
আনথার

17
এই মন্তব্যটি লেখার সময় একমাত্র সঠিক উত্তরের জন্য +1 1
এনবি

8
নতুন ডেটটাইম ক্লাসটি ব্যবহার করা ভাল, তবে কেন এমন একটি ডেটইন্টারওয়াল তৈরি করা হবে যা তারপরে এতটা বিশ্রীভাবে ডিকোড করতে হবে? $dateFrom = new DateTime('2007-09-01 04:10:58'); $dateTo = new DateTime('2012-09-11 10:25:00'); echo ($dateTo->getTimestamp()-$dateFrom->getTimestamp())/60 ;
dkloke

2
কেউ আমাকে ব্যাখ্যা করতে পারেন কেন strtotimeএটির উত্তরের চেয়ে উত্তম ? এটি OOP- র ক্ষেত্রে মনে হয় যখন কার্যনির্বাহী কম সময়ে বৈধ (এবং যথেষ্ট পরিমাণে সংক্ষিপ্ত) সমাধান হিসাবে কার্যকর হয়।
বিং

341

উত্তরটি এখানে:

$to_time = strtotime("2008-12-13 10:42:00");
$from_time = strtotime("2008-12-13 10:21:00");
echo round(abs($to_time - $from_time) / 60,2). " minute";

4
অ্যাবস () ফাংশন প্রয়োজন যদি কেউ নেতিবাচক সময় পরীক্ষা করতে চান!
প্রাণ

34
যারা ভাবছেন তাদের জন্য, / 60,2অর্থ: ষাটটি ভাগ করে নিকটস্থ দুটি দশমিক স্থানে গোল করুন।
বিং

3
স্ট্রোটটাইম অবিশ্বাস্য, এড়িয়ে চলুন। কেবলমাত্র নির্দিষ্ট তারিখের ফর্ম্যাটগুলির জন্য কাজ করে, বেশিরভাগ মার্কিন-সম্পর্কিত।
সিভান

14
strtotimeঅপ্রচলিত হতে পারে তবে আপনি যদি এটি সঠিকভাবে ব্যবহার করেন তবে এটি বিশ্বাসযোগ্য নয়। তারিখগুলি সঠিকভাবে পড়তে (বা পার্স করা) করতে আপনাকে সঙ্গতিপূর্ণ তারিখের ফর্ম্যাটগুলির সাথে কাজ করার প্রয়োজন হওয়ার কারণ এটি দাঁড়িয়েছে। ISO 8601সরঞ্জামগুলি দেখুন এবং দোষ দিবেন না: =)
ফিলি

34
<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>

1
এটি উপরের বন্দুকের বিপরীতে খুব ঝরঝরে এবং স্ব স্ব ব্যাখ্যাযোগ্য।
TheRealChx101

আপনি sleepএকটি তারিখের পার্থক্য গণনা করার জন্য কেন কিছু প্রয়োজন তা ব্যাখ্যা করতে পারেন ?
নিকো হাজে

2
দ্রুত ঘুম না হওয়ার সাথে তুলনা করার জন্য অন্য সময় অপেক্ষা করার সময় আপনার সময়টি কীভাবে ব্যবহার করা যায়। যদিও এটি তাত্ত্বিকভাবে আপনাকে 2 টির উত্তর দিতে হবে যা সূত্রটি বোঝার চেষ্টা করা লোকেদের এটি সঠিক তা নিশ্চিত করে সহায়তা করতে পারে।
slappy-x

15

এটি আমার প্রোগ্রামগুলিতে কাজ করেছে, আমি ব্যবহার করছি date_diff, আপনি এখানেdate_diff ম্যানুয়াল পরীক্ষা করতে পারেন ।

$start = date_create('2015-01-26 12:01:00');
$end = date_create('2015-01-26 13:15:00');
$diff=date_diff($end,$start);
print_r($diff);

আপনি যা চান ফলাফল পাবেন।


1
আশ্চর্যজনক, আমার জন্য, কোডটি চালানো মিনিটের মধ্যে সময়ের পার্থক্য সরবরাহ করে না
নিকো হাজে

আপনি যদি "1hr 14mins" আউটপুট করতে চান তবে এটি কার্যকর। আপনি যদি মাত্র কয়েক মিনিট চান, উদাহরণস্বরূপ), আপনাকে গণিতটি করতে হবে: ($ diff-> h * 60) + $ diff-> i)
জিডিপি

13

টাইমজোন সহ অন্য উপায়।

$start_date = new DateTime("2013-12-24 06:00:00",new DateTimeZone('Pacific/Nauru'));
$end_date = new DateTime("2013-12-24 06:45:00", new DateTimeZone('Pacific/Nauru'));
$interval = $start_date->diff($end_date);
$hours   = $interval->format('%h'); 
$minutes = $interval->format('%i');
echo  'Diff. in minutes is: '.($hours * 60 + $minutes);

4
আপনি যদি দিনগুলি চান তবে আপনি যুক্ত করার চেয়ে $days = $interval->format('%d');আলাদা এবং ভিন্ন ($days * 1440 + $hours * 60 + $minutes)। মাস, বছর ধরে => একই যুক্তি
দেখেন

12

আমি আমার ব্লগ সাইটের জন্য এই ফাংশনটি লিখেছি (বিগত তারিখ এবং সার্ভারের তারিখের মধ্যে পার্থক্য)। এটি আপনাকে এভাবে আউটপুট দেবে

"49 সেকেন্ড আগে", "20 মিনিট আগে", "21 ঘন্টা আগে" এবং আরও অনেক কিছু

আমি একটি ফাংশন ব্যবহার করেছি যা আমাকে পাসের তারিখ এবং সার্ভারের তারিখের মধ্যে পার্থক্য পেতে পারে।

<?php

//Code written by purpledesign.in Jan 2014
function dateDiff($date)
{
  $mydate= date("Y-m-d H:i:s");
  $theDiff="";
  //echo $mydate;//2014-06-06 21:35:55
  $datetime1 = date_create($date);
  $datetime2 = date_create($mydate);
  $interval = date_diff($datetime1, $datetime2);
  //echo $interval->format('%s Seconds %i Minutes %h Hours %d days %m Months %y Year    Ago')."<br>";
  $min=$interval->format('%i');
  $sec=$interval->format('%s');
  $hour=$interval->format('%h');
  $mon=$interval->format('%m');
  $day=$interval->format('%d');
  $year=$interval->format('%y');
  if($interval->format('%i%h%d%m%y')=="00000")
  {
    //echo $interval->format('%i%h%d%m%y')."<br>";
    return $sec." Seconds";

  } 

else if($interval->format('%h%d%m%y')=="0000"){
   return $min." Minutes";
   }


else if($interval->format('%d%m%y')=="000"){
   return $hour." Hours";
   }


else if($interval->format('%m%y')=="00"){
   return $day." Days";
   }

else if($interval->format('%y')=="0"){
   return $mon." Months";
   }

else{
   return $year." Years";
   }

}
?>

ধরুন এটি একটি ফাইল হিসাবে সংরক্ষণ করুন "তারিখ.এফপি"। এই মত অন্য পৃষ্ঠা থেকে ফাংশন কল করুন

<?php
 require('date.php');
 $mydate='2014-11-14 21:35:55';
 echo "The Difference between the server's date and $mydate is:<br> ";
 echo dateDiff($mydate);
?>

অবশ্যই আপনি দুটি মান পাস করার জন্য ফাংশনটি পরিবর্তন করতে পারেন।


10

আমি মনে করি এটি আপনাকে সাহায্য করবে

function calculate_time_span($date){
    $seconds  = strtotime(date('Y-m-d H:i:s')) - strtotime($date);

        $months = floor($seconds / (3600*24*30));
        $day = floor($seconds / (3600*24));
        $hours = floor($seconds / 3600);
        $mins = floor(($seconds - ($hours*3600)) / 60);
        $secs = floor($seconds % 60);

        if($seconds < 60)
            $time = $secs." seconds ago";
        else if($seconds < 60*60 )
            $time = $mins." min ago";
        else if($seconds < 24*60*60)
            $time = $hours." hours ago";
        else if($seconds < 24*60*60)
            $time = $day." day ago";
        else
            $time = $months." month ago";

        return $time;
}

দয়া করে আপনার কোডটিতে এমন কিছু ব্যাখ্যা যুক্ত করুন যাতে ওপি এটির কাছ থেকে শিখতে পারে
নিকো হায়েস

কয়েক মিনিটের জন্য$minutes = floor(($seconds/60)%60);
অরবিন্দ গোপী

8
function date_getFullTimeDifference( $start, $end )
{
$uts['start']      =    strtotime( $start );
        $uts['end']        =    strtotime( $end );
        if( $uts['start']!==-1 && $uts['end']!==-1 )
        {
            if( $uts['end'] >= $uts['start'] )
            {
                $diff    =    $uts['end'] - $uts['start'];
                if( $years=intval((floor($diff/31104000))) )
                    $diff = $diff % 31104000;
                if( $months=intval((floor($diff/2592000))) )
                    $diff = $diff % 2592000;
                if( $days=intval((floor($diff/86400))) )
                    $diff = $diff % 86400;
                if( $hours=intval((floor($diff/3600))) )
                    $diff = $diff % 3600;
                if( $minutes=intval((floor($diff/60))) )
                    $diff = $diff % 60;
                $diff    =    intval( $diff );
                return( array('years'=>$years,'months'=>$months,'days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff) );
            }
            else
            {
                echo "Ending date/time is earlier than the start date/time";
            }
        }
        else
        {
            echo "Invalid date/time data detected";
        }
}

8

একটি আরও সার্বজনীন সংস্করণ যা ভগ্নাংশ / দশমিক সহ দিন, ঘন্টা, মিনিট বা সেকেন্ডে ফলাফল দেয়:

function DateDiffInterval($sDate1, $sDate2, $sUnit='H') {
//subtract $sDate2-$sDate1 and return the difference in $sUnit (Days,Hours,Minutes,Seconds)
    $nInterval = strtotime($sDate2) - strtotime($sDate1);
    if ($sUnit=='D') { // days
        $nInterval = $nInterval/60/60/24;
    } else if ($sUnit=='H') { // hours
        $nInterval = $nInterval/60/60;
    } else if ($sUnit=='M') { // minutes
        $nInterval = $nInterval/60;
    } else if ($sUnit=='S') { // seconds
    }
    return $nInterval;
} //DateDiffInterval

দয়া করে আপনার কোডটিতে এমন কিছু ব্যাখ্যা যুক্ত করুন যাতে ওপি এটির কাছ থেকে শিখতে পারে
নিকো হায়েস

7

এইভাবে আমি পিএইচপি> 5.2 এ "xx বার আগে" প্রদর্শিত হয়েছিল .. এখানে ডেটটাইম অবজেক্টের আরও তথ্য দেওয়া আছে

//Usage:
$pubDate = $row['rssfeed']['pubDates']; // e.g. this could be like 'Sun, 10 Nov 2013 14:26:00 GMT'
$diff = ago($pubDate);    // output: 23 hrs ago

// Return the value of time different in "xx times ago" format
function ago($timestamp)
{

$today = new DateTime(date('y-m-d h:i:s')); // [2]
//$thatDay = new DateTime('Sun, 10 Nov 2013 14:26:00 GMT');
$thatDay = new DateTime($timestamp);
$dt = $today->diff($thatDay);

if ($dt->y > 0)
{
    $number = $dt->y;
    $unit = "year";
}
else if ($dt->m > 0)
{
    $number = $dt->m;
    $unit = "month";
}   
else if ($dt->d > 0)
{
    $number = $dt->d;
   $unit = "day";
}
else if ($dt->h > 0)
{
    $number = $dt->h;
    $unit = "hour";
}
else if ($dt->i > 0)
{
    $number = $dt->i;
    $unit = "minute";
}
else if ($dt->s > 0)
{
    $number = $dt->s;
    $unit = "second";
}

$unit .= $number  > 1 ? "s" : "";

$ret = $number." ".$unit." "."ago";
return $ret;
}


3

সময়গুলি বিয়োগ করুন এবং 60 দ্বারা ভাগ করুন।

এখানে একটি উদাহরণ যা 2019/02/01 10:23:45মিনিটের মধ্যে থেকে অতিবাহিত সময় গণনা করে :

$diff_time=(strtotime(date("Y/m/d H:i:s"))-strtotime("2019/02/01 10:23:45"))/60;

2

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

function alihan_diff_dates($date = null, $diff = "minutes") {
 $start_date = new DateTime($date);
 $since_start = $start_date->diff(new DateTime( date('Y-m-d H:i:s') )); // date now
 print_r($since_start);
 switch ($diff) {
    case 'seconds':
        return $since_start->s;
        break;
    case 'minutes':
        return $since_start->i;
        break;
    case 'hours':
        return $since_start->h;
        break;
    case 'days':
        return $since_start->d;
        break;      
    default:
        # code...
        break;
 }
}

আপনি এই ফাংশনটি বিকাশ করতে পারেন। আমি পরীক্ষিত এবং আমার জন্য কাজ করে। তারিখ অন্তর্বর্তী অবজেক্ট আউটপুট এখানে:

/*
DateInterval Object ( [y] => 0 [m] => 0 [d] => 0 [h] => 0 [i] => 5 [s] => 13 [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => 0 [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) 
*/

ফাংশন ব্যবহার:

$ তারিখ = বিগত তারিখ, $ ডিফাইফ = টাইপ যেমন: "মিনিট", "দিন", "সেকেন্ড"

$diff_mins = alihan_diff_dates("2019-03-24 13:24:19", "minutes");

শুভকামনা


0

এইটা সাহায্য করবে....

function get_time($date,$nosuffix=''){
    $datetime = new DateTime($date);
    $interval = date_create('now')->diff( $datetime );
    if(empty($nosuffix))$suffix = ( $interval->invert ? ' ago' : '' );
    else $suffix='';
    //return $interval->y;
    if($interval->y >=1)        {$count = date(VDATE, strtotime($date)); $text = '';}
    elseif($interval->m >=1)    {$count = date('M d', strtotime($date)); $text = '';}
    elseif($interval->d >=1)    {$count = $interval->d; $text = 'day';} 
    elseif($interval->h >=1)    {$count = $interval->h; $text = 'hour';}
    elseif($interval->i >=1)    {$count = $interval->i; $text = 'minute';}
    elseif($interval->s ==0)    {$count = 'Just Now'; $text = '';}
    else                        {$count = $interval->s; $text = 'second';}
    if(empty($text)) return '<i class="fa fa-clock-o"></i> '.$count;
    return '<i class="fa fa-clock-o"></i> '.$count.(($count ==1)?(" $text"):(" ${text}s")).' '.$suffix;     
}

1
দয়া করে আপনার কোডটিতে এমন কিছু ব্যাখ্যা যুক্ত করুন যাতে ওপি এটির কাছ থেকে শিখতে পারে
নিকো হায়েস

0

আমি অনেকগুলি সমাধান খুঁজে পেয়েছি তবে আমি কখনই সঠিক সমাধান পাইনি। তবে আমি কয়েক মিনিটের সন্ধান করার জন্য কিছু কোড তৈরি করেছি দয়া করে এটি পরীক্ষা করে দেখুন।

<?php

  $time1 = "23:58";
  $time2 = "01:00";
  $time1 = explode(':',$time1);
  $time2 = explode(':',$time2);
  $hours1 = $time1[0];
  $hours2 = $time2[0];
  $mins1 = $time1[1];
  $mins2 = $time2[1];
  $hours = $hours2 - $hours1;
  $mins = 0;
  if($hours < 0)
  {
    $hours = 24 + $hours;
  }
  if($mins2 >= $mins1) {
        $mins = $mins2 - $mins1;
    }
    else {
      $mins = ($mins2 + 60) - $mins1;
      $hours--;
    }
    if($mins < 9)
    {
      $mins = str_pad($mins, 2, '0', STR_PAD_LEFT);
    }
    if($hours < 9)
    {
      $hours =str_pad($hours, 2, '0', STR_PAD_LEFT);
    }
echo $hours.':'.$mins;
?>

এটি ঘন্টা এবং মিনিটের মধ্যে আউটপুট দেয় উদাহরণস্বরূপ 01 ঘন্টা 02 মিনিটের মত 01:02

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