초를 일, 시간, 분 및 초로 변환
$uptime
초인 변수 를 일, 시간, 분 및 초로 변환하고 싶습니다 .
예 :
$uptime = 1640467;
결과는 다음과 같다.
18 days 23 hours 41 minutes
이 클래스는 달성 할 수 있습니다.DateTime
사용하다 :
echo secondsToTime(1640467);
# 18 days, 23 hours, 41 minutes and 7 seconds
함수 :
function secondsToTime($seconds) {
$dtF = new \DateTime('@0');
$dtT = new \DateTime("@$seconds");
return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
}
이것은 일을 포함하고 재택하는 함수입니다. 또한 코드를 더 쉽게 변경할 수있었습니다.
/**
* Convert number of seconds into hours, minutes and seconds
* and return an array containing those values
*
* @param integer $inputSeconds Number of seconds to parse
* @return array
*/
function secondsToTime($inputSeconds) {
$secondsInAMinute = 60;
$secondsInAnHour = 60 * $secondsInAMinute;
$secondsInADay = 24 * $secondsInAnHour;
// extract days
$days = floor($inputSeconds / $secondsInADay);
// extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);
// extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);
// extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);
// return the final array
$obj = array(
'd' => (int) $days,
'h' => (int) $hours,
'm' => (int) $minutes,
's' => (int) $seconds,
);
return $obj;
}
출처 : CodeAid () -http : //codeaid.net/php/convert-seconds-to-hours-minutes-and-seconds- (php )
Julian Moreno의 답변을 기반으로하지만 응답을 기반으로하는 것 (배열 아님)로 제공하는 변경 열 아님)로 제공하는 데 필요한 시간 간격 만 포함하고 복수형을 가정하지 않습니다.
이 답변과 가장 많이 투표 한 답변의 차이점은 다음과 있습니다.
들어 259264
초, 이 코드 줄 것이다
3 일 1 분 4 초
들어 259264
초는 가장 높은 (Glavić로) 대답을 투표를 줄 것이다
삼일, 0 시간 1 개 S 및 사초
function secondsToTime($inputSeconds) {
$secondsInAMinute = 60;
$secondsInAnHour = 60 * $secondsInAMinute;
$secondsInADay = 24 * $secondsInAnHour;
// Extract days
$days = floor($inputSeconds / $secondsInADay);
// Extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);
// Extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);
// Extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);
// Format and return
$timeParts = [];
$sections = [
'day' => (int)$days,
'hour' => (int)$hours,
'minute' => (int)$minutes,
'second' => (int)$seconds,
];
foreach ($sections as $name => $value){
if ($value > 0){
$timeParts[] = $value. ' '.$name.($value == 1 ? '' : 's');
}
}
return implode(', ', $timeParts);
}
누군가에게 도움이되기를 바랍니다.
다음은 초 수를 많은 초 동안 월 수를 포함하여 사람이 읽을 수있는 것으로 변환하는 간단한 8 줄 PHP 함수입니다.
gmdate("d H:i:s",1640467);
결과는 19 23:41:07입니다. 평상시보다 1 초 더 많으면 1 일의 요일 값을 증가시키는 것입니다. 이것이 19를 표시하는 이유입니다. 필요에 따라 결과를 확장하고이를 수 있습니다.
여기에 아주 좋은이 제안 그들 중 어느 것도 내 요구를 듣고 있습니다. Glavic의 답변 을 기반으로 필요한 추가 기능을 추가했습니다.
- 0을 인쇄하지 않습니다. 따라서 "0 시간 5 분"대신 "5 분"
- 복수형을 사용하는 대신에 복수형을 처리하십시오.
- 출력을 단위 수로 제한하십시오. 따라서 "2 개월, 2 일, 1 시간, 45 분"대신 "2 개월, 2 일"
실행중인 코드 버전을 볼 수 있습니다 here.
function secondsToHumanReadable(int $seconds, int $requiredParts = null)
{
$from = new \DateTime('@0');
$to = new \DateTime("@$seconds");
$interval = $from->diff($to);
$str = '';
$parts = [
'y' => 'year',
'm' => 'month',
'd' => 'day',
'h' => 'hour',
'i' => 'minute',
's' => 'second',
];
$includedParts = 0;
foreach ($parts as $key => $text) {
if ($requiredParts && $includedParts >= $requiredParts) {
break;
}
$currentPart = $interval->{$key};
if (empty($currentPart)) {
continue;
}
if (!empty($str)) {
$str .= ', ';
}
$str .= sprintf('%d %s', $currentPart, $text);
if ($currentPart > 1) {
// handle plural
$str .= 's';
}
$includedParts++;
}
return $str;
}
가장 간단한 방법은 현재 시간 $ now에서 $ 초 단위의 상대 시간의 DateTime :: diff에서 DateInterval을 반환하는 메서드를 만드는 것입니다. 예 :-
public function toDateInterval($seconds) {
return date_create('@' . (($now = time()) + $seconds))->diff(date_create('@' . $now));
}
이제 메서드 호출을 DateInterval :: 형식에 연결합니다.
echo $this->toDateInterval(1640467)->format('%a days %h hours %i minutes'));
결과 :
18 days 23 hours 41 minutes
짧고 간단하며 수 있습니다.
function secondsToDHMS($seconds) {
$s = (int)$seconds;
return sprintf('%d:%02d:%02d:%02d', $s/86400, $s/3600%24, $s/60%60, $s%60);
}
매우 오래된 질문이지만-다음과 같은 유용한 정보를 사용할 수 있습니다 (빠르도록 작성되지 않음).
function d_h_m_s__string1($seconds)
{
$ret = '';
$divs = array(86400, 3600, 60, 1);
for ($d = 0; $d < 4; $d++)
{
$q = (int)($seconds / $divs[$d]);
$r = $seconds % $divs[$d];
$ret .= sprintf("%d%s", $q, substr('dhms', $d, 1));
$seconds = $r;
}
return $ret;
}
function d_h_m_s__string2($seconds)
{
if ($seconds == 0) return '0s';
$can_print = false; // to skip 0d, 0d0m ....
$ret = '';
$divs = array(86400, 3600, 60, 1);
for ($d = 0; $d < 4; $d++)
{
$q = (int)($seconds / $divs[$d]);
$r = $seconds % $divs[$d];
if ($q != 0) $can_print = true;
if ($can_print) $ret .= sprintf("%d%s", $q, substr('dhms', $d, 1));
$seconds = $r;
}
return $ret;
}
function d_h_m_s__array($seconds)
{
$ret = array();
$divs = array(86400, 3600, 60, 1);
for ($d = 0; $d < 4; $d++)
{
$q = $seconds / $divs[$d];
$r = $seconds % $divs[$d];
$ret[substr('dhms', $d, 1)] = $q;
$seconds = $r;
}
return $ret;
}
echo d_h_m_s__string1(0*86400+21*3600+57*60+13) . "\n";
echo d_h_m_s__string2(0*86400+21*3600+57*60+13) . "\n";
$ret = d_h_m_s__array(9*86400+21*3600+57*60+13);
printf("%dd%dh%dm%ds\n", $ret['d'], $ret['h'], $ret['m'], $ret['s']);
결과 :
0d21h57m13s
21h57m13s
9d21h57m13s
function seconds_to_time($seconds){
// extract hours
$hours = floor($seconds / (60 * 60));
// extract minutes
$divisor_for_minutes = $seconds % (60 * 60);
$minutes = floor($divisor_for_minutes / 60);
// extract the remaining seconds
$divisor_for_seconds = $divisor_for_minutes % 60;
$seconds = ceil($divisor_for_seconds);
//create string HH:MM:SS
$ret = $hours.":".$minutes.":".$seconds;
return($ret);
}
function convert($seconds){
$string = "";
$days = intval(intval($seconds) / (3600*24));
$hours = (intval($seconds) / 3600) % 24;
$minutes = (intval($seconds) / 60) % 60;
$seconds = (intval($seconds)) % 60;
if($days> 0){
$string .= "$days days ";
}
if($hours > 0){
$string .= "$hours hours ";
}
if($minutes > 0){
$string .= "$minutes minutes ";
}
if ($seconds > 0){
$string .= "$seconds seconds";
}
return $string;
}
echo convert(3744000);
0 값을 제외하고 올바른 단 복수 값을 설정해야하는 솔루션
use DateInterval;
use DateTime;
class TimeIntervalFormatter
{
public static function fromSeconds($seconds)
{
$seconds = (int)$seconds;
$dateTime = new DateTime();
$dateTime->sub(new DateInterval("PT{$seconds}S"));
$interval = (new DateTime())->diff($dateTime);
$pieces = explode(' ', $interval->format('%y %m %d %h %i %s'));
$intervals = ['year', 'month', 'day', 'hour', 'minute', 'second'];
$result = [];
foreach ($pieces as $i => $value) {
if (!$value) {
continue;
}
$periodName = $intervals[$i];
if ($value > 1) {
$periodName .= 's';
}
$result[] = "{$value} {$periodName}";
}
return implode(', ', $result);
}
}
Glavić 뛰어난 솔루션의의 확장 버전으로 , 정수 유효성 검사, 1 초 해결 및 몇 문제 년 및 몇 달 동안 추가 지원을 제공하지만 컴퓨터 구문 분석에 덜 익숙해 져 더 인간 친화적 인 사람이되는을 구석으로입니다.
<?php
function secondsToHumanReadable(/*int*/ $seconds)/*: string*/ {
//if you dont need php5 support, just remove the is_int check and make the input argument type int.
if(!\is_int($seconds)){
throw new \InvalidArgumentException('Argument 1 passed to secondsToHumanReadable() must be of the type int, '.\gettype($seconds).' given');
}
$dtF = new \DateTime ( '@0' );
$dtT = new \DateTime ( "@$seconds" );
$ret = '';
if ($seconds === 0) {
// special case
return '0 seconds';
}
$diff = $dtF->diff ( $dtT );
foreach ( array (
'y' => 'year',
'm' => 'month',
'd' => 'day',
'h' => 'hour',
'i' => 'minute',
's' => 'second'
) as $time => $timename ) {
if ($diff->$time !== 0) {
$ret .= $diff->$time . ' ' . $timename;
if ($diff->$time !== 1 && $diff->$time !== -1 ) {
$ret .= 's';
}
$ret .= ' ';
}
}
return substr ( $ret, 0, - 1 );
}
var_dump(secondsToHumanReadable(1*60*60*2+1));
-> string(16) "2 hours 1 second"
와 DateInterval :
$d1 = new DateTime();
$d2 = new DateTime();
$d2->add(new DateInterval('PT'.$timespan.'S'));
$interval = $d2->diff($d1);
echo $interval->format('%a days, %h hours, %i minutes and %s seconds');
// Or
echo sprintf('%d days, %d hours, %d minutes and %d seconds',
$interval->days,
$interval->h,
$interval->i,
$interval->s
);
// $interval->y => years
// $interval->m => months
// $interval->d => days
// $interval->h => hours
// $interval->i => minutes
// $interval->s => seconds
// $interval->days => total number of days
다음은 두 날짜 사이의 기간을 위해 사용하는 코드입니다. 두 개의 날짜를 받아들이고 멋진 문장 구조의 답장을 제공합니다.
이것은 여기 에있는 코드의 약간 수정 된 버전입니다 .
<?php
function dateDiff($time1, $time2, $precision = 6, $offset = false) {
// If not numeric then convert texts to unix timestamps
if (!is_int($time1)) {
$time1 = strtotime($time1);
}
if (!is_int($time2)) {
if (!$offset) {
$time2 = strtotime($time2);
}
else {
$time2 = strtotime($time2) - $offset;
}
}
// If time1 is bigger than time2
// Then swap time1 and time2
if ($time1 > $time2) {
$ttime = $time1;
$time1 = $time2;
$time2 = $ttime;
}
// Set up intervals and diffs arrays
$intervals = array(
'year',
'month',
'day',
'hour',
'minute',
'second'
);
$diffs = array();
// Loop thru all intervals
foreach($intervals as $interval) {
// Create temp time from time1 and interval
$ttime = strtotime('+1 ' . $interval, $time1);
// Set initial values
$add = 1;
$looped = 0;
// Loop until temp time is smaller than time2
while ($time2 >= $ttime) {
// Create new temp time from time1 and interval
$add++;
$ttime = strtotime("+" . $add . " " . $interval, $time1);
$looped++;
}
$time1 = strtotime("+" . $looped . " " . $interval, $time1);
$diffs[$interval] = $looped;
}
$count = 0;
$times = array();
// Loop thru all diffs
foreach($diffs as $interval => $value) {
// Break if we have needed precission
if ($count >= $precision) {
break;
}
// Add value and interval
// if value is bigger than 0
if ($value > 0) {
// Add s if value is not 1
if ($value != 1) {
$interval.= "s";
}
// Add value and interval to times array
$times[] = $value . " " . $interval;
$count++;
}
}
if (!empty($times)) {
// Return string with times
return implode(", ", $times);
}
else {
// Return 0 Seconds
}
return '0 Seconds';
}
출처 : https://gist.github.com/ozh/8169202
올인원 솔루션. 0이있는 단위를 제공하지 않습니다. 단위 수만 생성합니다 (기본적으로 3 개). 꽤 길고 우아하지 않을 수도 있습니다. 정의는 선택 사항이지만 큰 프로젝트에서 유용 할 수 있습니다.
define('OneMonth', 2592000);
define('OneWeek', 604800);
define('OneDay', 86400);
define('OneHour', 3600);
define('OneMinute', 60);
function SecondsToTime($seconds, $num_units=3) {
$time_descr = array(
"months" => floor($seconds / OneMonth),
"weeks" => floor(($seconds%OneMonth) / OneWeek),
"days" => floor(($seconds%OneWeek) / OneDay),
"hours" => floor(($seconds%OneDay) / OneHour),
"mins" => floor(($seconds%OneHour) / OneMinute),
"secs" => floor($seconds%OneMinute),
);
$res = "";
$counter = 0;
foreach ($time_descr as $k => $v) {
if ($v) {
$res.=$v." ".$k;
$counter++;
if($counter>=$num_units)
break;
elseif($counter)
$res.=", ";
}
}
return $res;
}
아래로 투표 할 수 있습니다. 필요한 수도 있습니다.
Interval 클래스를 사용할 수 있습니다. 사용할 수 있습니다.
composer require lubos/cakephp-interval
$Interval = new \Interval\Interval\Interval();
// output 2w 6h
echo $Interval->toHuman((2 * 5 * 8 + 6) * 3600);
// output 36000
echo $Interval->toSeconds('1d 2h');
자세한 정보는 여기 https://github.com/LubosRemplik/CakePHP-Interval
내가 사용했던 (PHP를 배우는 동안)이 솔루션에 대한 해결책은 기능이 전혀 없습니다.
$days = (int)($uptime/86400); //1day = 86400seconds
$rdays = (uptime-($days*86400));
//seconds remaining after uptime was converted into days
$hours = (int)($rdays/3600);//1hour = 3600seconds,converting remaining seconds into hours
$rhours = ($rdays-($hours*3600));
//seconds remaining after $rdays was converted into hours
$minutes = (int)($rhours/60); // 1minute = 60seconds, converting remaining seconds into minutes
echo "$days:$hours:$minutes";
이 오래된 질문이 있습니다. 접한 새로운 학습자들은이 답변이 유용 할 것입니다.
foreach ($email as $temp => $value) {
$dat = strtotime($value['subscription_expiration']); //$value come from mysql database
//$email is an array from mysqli_query()
$date = strtotime(date('Y-m-d'));
$_SESSION['expiry'] = (((($dat - $date)/60)/60)/24)." Days Left";
//you will get the difference from current date in days.
}
$ value는 데이터베이스에서 가져옵니다. 이 코드는 Codeigniter에 있습니다. $ SESSION은 사용자 구독을 저장하는 데 사용됩니다. 필수입니다. 제 경우에 사용 된 원하는대로 사용할 수 있습니다.
이것은 귀하의 질문과 관련된 날짜에서 날짜를 빼기 위해 과거에 사무실 기능입니다. 제 프린시 페는 제품이 종료 될 때까지 며칠, 시간 분 및 초가 남았는지 확인하는 것이 었습니다.
$expirationDate = strtotime("2015-01-12 20:08:23");
$toDay = strtotime(date('Y-m-d H:i:s'));
$difference = abs($toDay - $expirationDate);
$days = floor($difference / 86400);
$hours = floor(($difference - $days * 86400) / 3600);
$minutes = floor(($difference - $days * 86400 - $hours * 3600) / 60);
$seconds = floor($difference - $days * 86400 - $hours * 3600 - $minutes * 60);
echo "{$days} days {$hours} hours {$minutes} minutes {$seconds} seconds";
참고 URL : https://stackoverflow.com/questions/8273804/convert-seconds-into-days-hours-minutes-and-seconds
'IT' 카테고리의 다른 글
Android에서 탐색 창에 하나의 섹션 구분 기호를 추가하는 방법은 무엇입니까? (0) | 2020.09.17 |
---|---|
원사를 제거하는 방법 (0) | 2020.09.17 |
Gradle- 종속성의 최신 릴리스 버전 가져 오기 (0) | 2020.09.17 |
C #에서 최대 3 개의 숫자를 찾는 방법이 있습니까? (0) | 2020.09.17 |
display : none에 의해 숨겨진 입력 필드를 서버로 보안하는 것을 피하는 방법은 무엇입니까? (0) | 2020.09.16 |