PHP에서 두 날짜 시간의 미세한 차이를 계산하는 방법은 무엇입니까?
PHP에서 두 날짜 시간의 미세한 차이를 계산하는 방법은 무엇입니까?
답변:
미래의 가장 많은 것을 미래의 가장 많이 빼고 60으로 나눕니다.
시간은 유닉스 형식으로 이루어 지므로 초 단위의 시간을 나타내는 큰 숫자 일뿐입니다. January 1, 1970, 00:00:00 GMT
위의 답변은 이전 버전의 PHP에 대한 것입니다. PHP 5.3이 표준이므로 DateTime 클래스를 사용하여 날짜 계산을 수행하십시오. 예 :
$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>';
$ since_start는 DateInterval입니다 객체입니다. days 속성을 사용할 수 있습니다 (DateTime 클래스의 diff 메서드를 사용하여 DateInterval 객체를 생성했기 때문에).
위의 코드는 다음과 같이 출력됩니다.
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 분
두 날짜 사이에 경과 한 실제 시간 (분)입니다. DateTime 클래스는 "이전 방식"이 적용되지 않는 일광 절약 시간제 (시간대에 따라 다름)를 고려합니다. 날짜와 시간에 관한 매뉴얼을 읽으십시오 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
위 의 답변 보다 나은지 설명해 줄 수 있습니까 ? Procedural이 AT LEAST 인 경우 (그리고 훨씬 더 간결한) OOP의 경우처럼 보입니다.
답은 다음과 같습니다.
$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
수단은 60으로 나누고 가장 가까운 소수점 이하 두 자리로 반올림합니다.
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');
diff는 ($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 times ago"를 표시 한 방법입니다. 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;
}
두 날짜의 차이점을 찾는 나의 해결책은 여기에 있습니다. 이 기능을 사용하면 초, 분,시, 일, 년 및 월과 같은 차이를 찾을 수 있습니다.
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 )
*/
기능 사용법 :
$ date = 과거 날짜, $ diff = 유형 예 : "분", "일", "초"
$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 분과 같이 시간과 분으로 출력합니다.