PHP में मिनटों में समय अंतर कैसे प्राप्त करें


जवाबों:


92

भूतकाल को भविष्य के सबसे एक से घटाएं और 60 से विभाजित करें।

टाइम्स यूनिक्स प्रारूप में किया जाता है, इसलिए वे केवल एक बड़ी संख्या से सेकंड की संख्या दिखा रहे हैं January 1, 1970, 00:00:00 GMT


1
@ जेराल्ड यह समाधान आपके लिए कैसे काम करता है? क्या आप इसे कम से कम थोड़ा संक्षिप्त करने का मन रखते हैं? धन्यवाद।
वाफी अली

7
@WafieAli $ nInterval = strtotime ($ sDate2) - स्ट्रटोटाइम ($ sDate1); यह सेकंड में समय का अंतर लौटाएगा, तो आप इस तरह से 60 से विभाजित कर सकते हैं। $ nInterval = $ nInterval / 60;
जेराल्ड

+1 यह बताने के लिए कि क्या करने की आवश्यकता है और बेकार DateInterval वर्ग का उपयोग न करने के लिए जो कि ऐसा करने की विधि नहीं है: मिनटों में अंतर लौटाएं ।
आंद्रेकेआर

404

ऊपर दिए गए उत्तर PHP के पुराने संस्करणों के लिए हैं। किसी भी दिनांक की गणना करने के लिए DateTime वर्ग का उपयोग करें, अब PHP 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>';

$ with_start एक DateInterval ऑब्जेक्ट है। ध्यान दें कि दिन संपत्ति उपलब्ध है (क्योंकि हमने DateInterval ऑब्जेक्ट उत्पन्न करने के लिए DateTime वर्ग की अलग विधि का उपयोग किया था)।

उपरोक्त कोड आउटपुट करेगा:

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
Pitty DateInterval में विधि की तरह inSeconds()या कुछ समान नहीं है, अब यह हर जगह कोड दोहराव है मुझे सेकंड में अंतर की गणना करने की आवश्यकता है।
मारियस बाल्कीटिस

5
@ हार्बर या आप एक फ़ंक्शन लिख सकते हैं जो दोहराए जाने वाले कोड को लपेटता है, या यहां तक ​​कि डेटटाइम भी बढ़ाता है और अपना कोड दोहराता नहीं है।
एथोर

17
इस टिप्पणी को लिखने के समय एकमात्र उचित उत्तर के लिए +1।
एनबी

8
नए DateTime क्लास का उपयोग करना अच्छा है, लेकिन एक DateInterval क्यों उत्पन्न होता है, जिसे तब इतनी अजीब तरह से डिकोड करना पड़ता है? $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 के एक मामले की तरह लगता है जब प्रक्रियात्मक वैध (और काफी अधिक संक्षिप्त) समाधान के रूप में AT LEAST है।
बिंग

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
abs () फ़ंक्शन की आवश्यकता नहीं है अगर कोई भी नकारात्मक समय की जांच करना चाहता है!
प्राण

34
सोच रहे लोगों के लिए, / 60,2साधन: साठ से विभाजित, निकटतम दो दशमलव स्थानों के लिए गोल।
बिंग

3
strtotime अविश्वसनीय है, से बचें। केवल विशिष्ट दिनांक प्रारूपों के लिए काम करता है, ज्यादातर यूएस-संबंधित।
सिवान

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)
GDP

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";
   }

}
?>

इसे एक फ़ाइल मान लीजिए "date.php" के रूप में सहेजें। फ़ंक्शन को इस तरह से किसी अन्य पृष्ठ से कॉल करें

<?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

इस तरह मैंने php> 5.2 में "xx बार पहले" प्रदर्शित किया है। यहाँ DateTime ऑब्जेक्ट के बारे में अधिक जानकारी है

//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 ऑब्जेक्ट आउटपुट यहां है:

/*
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 मिनट उदाहरण के लिए घंटे और मिनटों में आउटपुट देता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.