현재 시간(밀리초)을 PHP로 가져오는 방법
time()
초단위는 밀리초 단위입니까?
간단한 답변은 다음과 같습니다.
$milliseconds = floor(microtime(true) * 1000);
사용. 이 함수는 공백으로 구분된 문자열을 반환합니다.첫 번째 부분은 초의 소수 부분이고 두 번째 부분은 적분 부분이에요.패스인true
숫자로 가져오기:
var_dump(microtime()); // string(21) "0.89115400 1283846202"
var_dump(microtime(true)); // float(1283846202.89)
사용하는 경우 정밀도 손실에 주의한다.microtime(true)
.
마이크로초 부분을 정수로 반환하는 것도 있습니다.
var_dump(gettimeofday());
/*
array(4) {
["sec"]=>
int(1283846202)
["usec"]=>
int(891199)
["minuteswest"]=>
int(-60)
["dsttime"]=>
int(1)
}
*/
간단한 답변:
64비트 플랫폼만!
function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}
[64비트 PHP 를 실행하고 있는 경우는, 상수와 같습니다]
장황한 답변:
등가 함수를 원하는 경우time()
먼저 밀리초 안에 그것을 고려해야 합니다.time()
는, 「유효한 시간」(01/1970) 이후 경과한 초수, 「유효한 시간」이 큰 숫자이기 때문에, 32비트 정수에 들어가지 않는 밀리초수를 반환합니다.
PHP의 정수 크기는 플랫폼에 따라 32비트 또는 64비트일 수 있습니다.
http://php.net/manual/en/language.types.integer.php 에서
정수의 크기는 플랫폼에 따라 다르지만 최대 약 20억 개의 값이 일반 값(서명된 32비트)입니다.64비트 플랫폼의 최대값은 보통 약 9E18입니다.단, Windows는 항상 32비트입니다.PHP는 부호 없는 정수를 지원하지 않습니다.정수 크기는 상수 PHP_를 사용하여 확인할 수 있습니다.INT_SIZE 및 상수 PHP_를 사용한 최대값PHP 4.4.0 및 PHP 5.0.5 이후 INT_MAX.
64비트 정수의 경우 다음 함수를 사용할 수 있습니다.
function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}
microtime()
최대 마이크로초의 정밀도를 가진 "잠정 시간" 이후 경과한 초수를 2개의 숫자를 공백으로 구분하여 반환합니다.예를 들어 다음과 같습니다.
0.90441300 1409263371
두 번째 숫자는 초(정수)이며 첫 번째 숫자는 소수입니다.
위의 기능milliseconds()
정수 부분에 를 곱한 값을 구함1000
1409263371000
그런 다음 소수점에 곱한 값을 더합니다.1000
소수점 이하 0으로 반올림
1409263371904
주의: 둘 다$mt[1]
그리고 그 결과round
에 캐스팅되다int
이것은 필요한 것입니다. 왜냐하면 그들은float
s 및 주조하지 않은 상태에서 작업을 수행하면 함수가 다음을 반환하게 됩니다.float
.
마지막으로, 그 함수는 보다 조금 더 정밀합니다.
round(microtime(true)*1000);
1:10(약)의 비율로 올바른 결과보다 1밀리초 더 많은 값을 반환합니다.이는 플로트 타입의 정밀도가 제한적이기 때문입니다(microtime(true)
플로트를 반환합니다)., 짧은 것이 , 더 짧은 것이 좋습니다.round(microtime(true)*1000);
합니다.int
결과
질문의 범위를 벗어나는 경우에도 플랫폼이 64비트 정수를 지원하는 경우 오버플로 없이 현재 시간을 마이크로초 단위로 얻을 수 있다는 점을 언급할 필요가 있습니다.
★★★★★★★의 경우2^63 - 1
있는 정수를 (부호 있는 정수)로 .10^6 * 3600 * 24 * 365
는 (1 내내내내 ( ( ()를 나타냅니다.292471
.
이것은, 델이 제공하는 것과 같은 가치입니다.
echo (int)( PHP_INT_MAX / ( 1000000 * 3600 * 24 * 365 ) );
즉, 부호 있는 64비트 정수는 마이크로초 단위로 측정된 200,000년 이상의 타임스팬을 저장할 수 있는 공간이 있습니다.
그때가 되면
function microseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000000 + ((int)round($mt[0] * 1000000));
}
이미 설명한 바와 같이 를 사용하면 타임스탬프의 정밀도를 밀리초 단위로 얻을 수 있습니다.
당신의 코멘트를 보면, 당신은 그것을 고정밀 UNIX 타임스탬프로 하고 싶은 것 같습니다.DateTime.Now.Ticks
있습니다NET net세세
이 경우 다음 기능을 사용할 수 있습니다.
function millitime() {
$microtime = microtime();
$comps = explode(' ', $microtime);
// Note: Using a string here to prevent loss of precision
// in case of "overflow" (PHP converts it to a double)
return sprintf('%d%03d', $comps[1], $comps[0] * 1000);
}
echo date('Y-m-d H:i:s.') . gettimeofday()['usec'];
출력:
2016-11-19 15:12:34.346351
PHP 5에서 사용하거나 PHP 4에서 다음과 같이 수정하십시오.
array_sum(explode(' ', microtime()));
이 코드를 쓰는 휴대용 방법은 다음과 같습니다.
function getMicrotime()
{
if (version_compare(PHP_VERSION, '5.0.0', '<'))
{
return array_sum(explode(' ', microtime()));
}
return microtime(true);
}
문자열 바리안트의 최단 버전(32비트 호환):
$milliseconds = date_create()->format('Uv');
이는 32비트 PHP를 사용하는 경우에도 작동합니다.
list($msec, $sec) = explode(' ', microtime());
$time_milli = $sec.substr($msec, 2, 3); // '1491536422147'
$time_micro = $sec.substr($msec, 2, 6); // '1491536422147300'
정수가 아니라 문자열이 표시됩니다.그러나 REST 요청의 URL을 작성하는 경우 등 많은 경우 이 방법은 정상적으로 작동합니다.
PHP 64입니다.
그런 다음 위의 코드를 재사용하여 (int)에 캐스트할 수 있습니다.
list($msec, $sec) = explode(' ', microtime());
// these parentheses are mandatory otherwise the precedence is wrong!
// ↓ ↓
$time_milli = (int) ($sec.substr($msec, 2, 3)); // 1491536422147
$time_micro = (int) ($sec.substr($msec, 2, 6)); // 1491536422147300
또는 좋은 한 줄짜리 줄을 사용할 수 있습니다.
$time_milli = (int) round(microtime(true) * 1000); // 1491536422147
$time_micro = (int) round(microtime(true) * 1000000); // 1491536422147300
이것을 시험해 보세요.
public function getTimeToMicroseconds() {
$t = microtime(true);
$micro = sprintf("%06d", ($t - floor($t)) * 1000000);
$d = new DateTime(date('Y-m-d H:i:s.' . $micro, $t));
return $d->format("Y-m-d H:i:s.u");
}
PHP 5.2.2 <
$d = new DateTime();
echo $d->format("Y-m-d H:i:s.u"); // u : Microseconds
PHP 7.0.0 < 7.1
$d = new DateTime();
echo $d->format("Y-m-d H:i:s.v"); // v : Milliseconds
$timeparts = explode(" ",microtime());
$currenttime = bcadd(($timeparts[0]*1000),bcmul($timeparts[1],1000));
echo $currenttime;
메모: 이 함수에는 microtime()이 개선되었기 때문에 PHP5가 필요하며 bc 연산 모듈도 필요합니다(대규모의 경우 모듈이 phpinfo에 있는지 확인할 수 있습니다).
도움이 되길 바랍니다.
$the_date_time = new DateTime($date_string);
$the_date_time_in_ms = ($the_date_time->format('U') * 1000) +
($the_date_time->format('u') / 1000);
, 을 해야 합니다.precision
의 php.ini
16까지
후 ★★★★★★★★★★★★★★★★★.microsecond(true)
의 산출물을 내게 주었다.1631882476.298437
.
그래서 나머지를 나눠야겠다고 생각했어요.298437
는 나머지가 1000입니다0.298437
1초 동안.그래서 나는 그것에 1000을 곱해야 정확한 결과를 얻을 수 있다.
function get_milliseconds()
{
$timestamp = microtime(true);
return (int)(($timestamp - (int)$timestamp) * 1000);
}
개인적으로는 다음과 같이 사용합니다.
public static function formatMicrotimestamp(DateTimeInterface $dateTime): int
{
return (int) substr($dateTime->format('Uu'), 0, 13);
}
이것은, 32비트에서도 동작할 수 있는 실장입니다.
function mstime(){
$mstime = explode(' ',microtime());
return $mstime[1].''.(int)($mstime[0]*1000);
}
사용방법:
function get_millis(){
list($usec, $sec) = explode(' ', microtime());
return (int) ((int) $sec * 1000 + ((float) $usec * 1000));
}
안녕.
언급URL : https://stackoverflow.com/questions/3656713/how-to-get-current-time-in-milliseconds-in-php
'programing' 카테고리의 다른 글
Node.js를 원격 데이터베이스 Maria에 연결할 수 없습니다.DB (0) | 2023.01.31 |
---|---|
특정 회선에 대한 eslint 규칙 해제 (0) | 2023.01.31 |
PHP에서 어레이와 데이터를 정렬하려면 어떻게 해야 합니까? (0) | 2023.01.31 |
PHP를 사용하여 JQuery .ajax()에 대한 적절한 성공/오류 메시지를 반환하려면 어떻게 해야 합니까? (0) | 2023.01.31 |
JavaScript를 사용한 이미지 프리로드 (0) | 2023.01.31 |