PHP में दो दिनांक-समय के बीच मिनट के अंतर की गणना कैसे करें?
PHP में दो दिनांक-समय के बीच मिनट के अंतर की गणना कैसे करें?
जवाबों:
भूतकाल को भविष्य के सबसे एक से घटाएं और 60 से विभाजित करें।
टाइम्स यूनिक्स प्रारूप में किया जाता है, इसलिए वे केवल एक बड़ी संख्या से सेकंड की संख्या दिखा रहे हैं January 1, 1970, 00:00:00 GMT
ऊपर दिए गए उत्तर 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
inSeconds()
या कुछ समान नहीं है, अब यह हर जगह कोड दोहराव है मुझे सेकंड में अंतर की गणना करने की आवश्यकता है।
$dateFrom = new DateTime('2007-09-01 04:10:58'); $dateTo = new DateTime('2012-09-11 10:25:00'); echo ($dateTo->getTimestamp()-$dateFrom->getTimestamp())/60 ;
strtotime
ऊपर दिए गए उत्तर से बेहतर क्यों है ? यह OOP के एक मामले की तरह लगता है जब प्रक्रियात्मक वैध (और काफी अधिक संक्षिप्त) समाधान के रूप में AT LEAST है।
यहाँ जवाब है:
$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";
/ 60,2
साधन: साठ से विभाजित, निकटतम दो दशमलव स्थानों के लिए गोल।
strtotime
अप्रचलित हो सकता है, लेकिन यह अविश्वसनीय नहीं है यदि आप इसे ठीक से उपयोग करते हैं। यह इस कारण से है कि आपको तारीखों को सही ढंग से पढ़ने (या पार्स) करने में सक्षम होने के लिए लगातार तारीख प्रारूपों के साथ काम करने की आवश्यकता है। देखें ISO 8601
और उपकरणों को दोष न दें: =)
<?php
$date1 = time();
sleep(2000);
$date2 = time();
$mins = ($date2 - $date1) / 60;
echo $mins;
?>
sleep
तारीख अंतर की गणना करने के लिए आपको कुछ की आवश्यकता क्यों है ?
यह मेरे कार्यक्रमों पर काम कर रहा है 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);
आपको जो चाहिए वो मिलता है।
टाइमजोन के साथ एक और तरीका।
$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);
$days = $interval->format('%d');
और अंतर है ($days * 1440 + $hours * 60 + $minutes)
। महीनों के लिए, वर्ष => एक ही तर्क
मैंने इस फ़ंक्शन को अपनी एक ब्लॉग साइट (एक पिछली तारीख और सर्वर की तारीख के बीच अंतर) के लिए लिखा था। यह आपको इस तरह से आउटपुट देगा
"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);
?>
बेशक आप दो मान पास करने के लिए फ़ंक्शन को संशोधित कर सकते हैं।
मुझे लगता है कि यह आपकी मदद करेगा
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);
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";
}
}
एक अधिक सार्वभौमिक संस्करण जो दिन, घंटे, मिनट या सेकंड में परिणाम देता है जिसमें अंश / दशमलव शामिल हैं:
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
इस तरह मैंने 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;
}
<?php
$start = strtotime('12:01:00');
$end = strtotime('13:16:00');
$mins = ($end - $start) / 60;
echo $mins;
?>
आउटपुट:
75
दो तिथियों के बीच अंतर खोजने का मेरा समाधान यहां है। इस फ़ंक्शन के साथ आप सेकंड, मिनट, घंटे, दिन, वर्ष और महीने जैसे अंतर पा सकते हैं।
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");
शुभ लाभ।
ये सहायता करेगा....
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;
}
मुझे बहुत समाधान मिला लेकिन मुझे कभी सही समाधान नहीं मिला। लेकिन मैंने मिनट खोजने के लिए कुछ कोड बनाया है कृपया इसे जांचें।
<?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 मिनट उदाहरण के लिए घंटे और मिनटों में आउटपुट देता है