IT

밀리 초에서 날짜 형식 mdY H : i : su 가져 오기 오기

lottoking 2020. 8. 14. 07:59
반응형

밀리 초에서 날짜 형식 mdY H : i : su 가져 오기 오기


밀리 초에서 마이크로 초를 포함하여 형식이 지정된 날짜를 가져 오려고합니다.

유일한 문제는 계속 000000

date("m-d-Y H:i:s.u", $milliseconds/1000);

전의. 07-28-2013 11 : 26 : 14.000000


php.net 말한다 :

마이크로 초 (PHP 5.2.2에 추가됨). 참고 date()항상 생성 000000은 정수 매개 변수를 사용하기 때문에 반면, DateTime::format()경우 지원 micro-않습니다 DateTimemicro-만들었습니다.

간단하게 사용하십시오.

$micro_date = microtime();
$date_array = explode(" ",$micro_date);
$date = date("Y-m-d H:i:s",$date_array[1]);
echo "Date: $date:" . $date_array[0]."<br>";

dateTime()참조 된 권장 및 사용 클래스 :

$t = microtime(true);
$micro = sprintf("%06d",($t - floor($t)) * 1000000);
$d = new DateTime( date('Y-m-d H:i:s.'.$micro, $t) );

print $d->format("Y-m-d H:i:s.u"); // note at point on "u"

참고 사항 u은 마이크로 초입니다 (1 초 = 1000000µs).

php.net의 또 다른 예 :

$d2=new DateTime("2012-07-08 11:14:15.889342");

의 기준 dateTime()php.net

저자에게는 짧고 단순화 된 질문에 답했습니다. 작성자에 대한 자세한 정보 는 밀리 초에서 날짜 형식 mdY H : i : su 가져 오기 를 참조하십시오 .


입력 형식 으로이 작업을 쉽게 수행 할 수 있습니다 U.u.

$now = DateTime::createFromFormat('U.u', microtime(true));
echo $now->format("m-d-Y H:i:s.u");

그러면 다음과 같은 출력이 생성됩니다.

04-13-2015 05:56:22.082300

날짜 형식에 대한 PHP 매뉴얼 페이지에서 :

  • U = Unix Epoch 이후 초
  • u = 마이크로 초

http://php.net/manual/en/function.date.php


내 원래의 결함의 결함을 지적한 giggsey에게 감사드립니다 number_format(). 줄에 추가 하면 정확한 두 번째 경우가 수정됩니다. 안타깝게도 더 이상 우아하게 느껴지지 않는 ...

$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));

http://php.net/manual/en/function.number-format.php


DaVe에 대한 응답으로 존재에 대한 메모.

일반적으로 createFromFormat()방법은 지정되지 않은 경우 현지 언어를 사용합니다.

http://php.net/manual/en/datetime.createfromformat.php

그러나 여기에 설명 된 기술 microtime()은 Unix Epoch (1970 년 1 월 1 일 00:00:00 GMT) 이후 경과 된 시간 (초)을 반환 하는 DateTime을 초기화하는 것 입니다.

http://php.net/manual/en/function.microtime.php

즉, DateTime 개체가 암시 적으로 UTC로 초기화되어 경과 시간을 추적하려는 서버 내부 작업에 적합합니다.

특정 고유의 시간을 표시해야하는 경우 그에 따라 설정해야합니다. 그러나 이것은 논의 된 이유 때문에 ( 의 세 번째 회차 변수를 사용 하지 않음) 후 별도의 단계로 수행해야합니다 createFromFormat().

setTimeZone()방법을 사용하여 요구 사항을 사용할 수 있습니다.

http://php.net/manual/en/datetime.settimezone.php

예로서 :

$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
echo $now->format("m-d-Y H:i:s.u") . '<br>';

$local = $now->setTimeZone(new DateTimeZone('Australia/Canberra'));
echo $local->format("m-d-Y H:i:s.u") . '<br>';

다음 출력을 생성합니다.

10-29-2015 00:40:09.433818
10-29-2015 11:40:09.433818

mysql에 입력하려는 시간 형식이 다음과 같아야합니다.

format("Y-m-d H:i:s.u")

여기에 약간 더 짧은 접근 방식이 있습니다. 고정밀 숫자 날짜 / 시간을 생성하는 대신 마이크로 초 값을 대체로 변환하고 0다음 날짜 / 시간을 생성하는 추가합니다. 확장 된 길이 매개 변수를 조정하여 소수 자릿수를 쉽게 독성 수 있습니다. 여기서는 4밀리 초를 얻는 데 사용 하지만 7마이크로 초를 얻는 데 사용할 수 있습니다 .

$t = explode(" ",microtime());
echo date("m-d-y H:i:s",$t[1]).substr((string)$t[0],1,4);

의 microtime () 값의 경우 0.98236000 1407400573반환합니다 08-07-14 01:08:13.982.


나는 사용하고있다

echo date("Y-m-d H:i:s.").gettimeofday()["usec"];

output: 2017-09-05 17:04:57.555036

echo date('m-d-Y H:i:s').substr(fmod(microtime(true), 1), 1);

예제 출력 :

02-06-2019 16:45:03.53811192512512

소수점 이하 자릿수를 제한해야하는 경우 아래 줄 (credit mgutt)이 좋은 대안이 될 것입니다. (아래 코드에서 6은 소수점 이하 자릿수를 6으로 제한합니다.)

echo date('m-d-Y H:i:').sprintf('%09.6f', date('s')+fmod(microtime(true), 1));

예제 출력 :

02-11-2019 15:33:03.624493

(new Date()).toISOString()어떤 이유로 JavaScript와 같은 날짜 형식을 지정 하려면 PHP에서 다음 과 같이 할 수 있습니다.

$now = microtime(true);
gmdate('Y-m-d\TH:i:s', $now).sprintf('.%03dZ',round(($now-floor($now))*1000));

샘플 출력 :

2016-04-27T18:25:56.696Z

정수를 빼도 소수점 이하 자릿수의 정확도가 떨어지지 않음을 증명하기 위해 :

>>> number_format(123.01234567890123456789,25)
=> "123.0123456789012408307826263"
>>> number_format(123.01234567890123456789-123,25)
=> "0.0123456789012408307826263"

PHP 소수점 자리를 반올림했지만 두 경우 모두 같은 방식으로 반올림했습니다.


약간 더 우아하고 간단하다고 생각되는 또 다른 방법은 다음과 같습니다.

echo date('Y-m-d-H:i:s.').preg_replace("/^.*\./i","", microtime(true));

// Procedural
$fineStamp = date('Y-m-d\TH:i:s') . substr(microtime(), 1, 9);
echo $fineStamp . PHP_EOL;

// Object-oriented (if you must). Still relies on $fineStamp though :-\
$d = new DateTime($fineStamp);
echo $d->format('Y-m-d\TH:i:s.u') . PHP_EOL;

이것은 ArchCodeMonkey의 답변을 기반으로합니다.

하지만 빠르게 작동하는 것을 원하면 간단합니다.

function DateTime_us_utc(){
    return DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
}
function DateTime_us(){
    $now = DateTime_us_utc();
    return $now->setTimeZone(new DateTimeZone(date_default_timezone_get()));
}

그래서 나를 위해

$now = DateTime_us();
$now->format("m-d-Y H:i:s.u");

문서는 다음과 같이 말합니다.

마이크로 초 (PHP 5.2.2에 추가됨). date ()는 정수 매개 변수를 사용하므로 항상 000000을 생성하지만 DateTime :: format ()은 마이크로 초를 지원합니다.

즉, 대신 DateTime을 사용하십시오.


이제 PHP 7.0 이상으로 다음을 수행 할 수 있습니다.

$dateString = substr($millseconds_go_here,0,10);
$drawDate = new \DateTime(Date('Y-m-d H:i',$dateString));
$drawDate->setTimezone(new \DateTimeZone('UTC'));

다음을 순서대로 수행합니다.

  1. Date()날짜를 처리 할 수 있도록 문자열에서 마지막 4 개의 0을 잘라냅니다 .
  2. date를 사용하여 밀리 초를 DateTime이 이해할 수있는 날짜 시간 문자열로 형식화합니다.
  3. DateTime()그런 다음 현재있는 시간대를 수정할 수 있지만 함수와 클래스 date_default_timezone_set("Timezone");를 사용하기 전에 설정되어 있는지 확인하십시오 DateTime().
  4. DateTime()클래스 나 함수를 사용할 때 올바른 시간대에 있는지 확인하려면 클래스에서 생성자를 사용하는 것이 좋습니다 .

PHP 7.1부터 간단하게 다음과 같이 할 수 있습니다.

$date = new DateTime( "NOW" );
echo $date->format( "m-d-Y H:i:s.u" );

다음과 같이 표시됩니다.

04-11-2018 10:54:01.321688

@ArchCodeMonkey 답변을 기반으로합니다.

당신이 경우 declare(strict_types=1)당신은 문자열에 두 번째 인수를 캐스팅해야한다

여기에 이미지 설명 입력


Carbon을 사용하는 경우 정의 된 사양 "RFC3339_EXTENDED"를 사용할 수 있습니다. 또는 사용자 정의하십시오.

Carbon::RFC3339_EXTENDED = 'Y-m-d\TH:i:s.vP';

참고 URL : https://stackoverflow.com/questions/17909871/getting-date-format-mdy-his-u-from-milliseconds

반응형