programing

PHP의 Date Time 클래스에서 Date Time-> date에 액세스할 수 없는 이유는 무엇입니까?

goodcopy 2023. 1. 20. 16:29
반응형

PHP의 Date Time 클래스에서 Date Time-> date에 액세스할 수 없는 이유는 무엇입니까?

「 」의 DateTime class, class, class, class command가 됩니다.

$mydate = new DateTime();
echo $mydate->date;

이 에러 메세지가 반환됩니다.

주의: 미정의 속성: DateTime::$date...

안 돼요.실행할 는 말이 안 돼요var_dump() ''로$mydate이 속성은 존재하며 공개적으로 액세스할 수 있음을 나타냅니다.

var_dump($mydate);

object(DateTime)[1]
  public 'date' => string '2012-12-29 17:19:25' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)

이것은 PHP의 버그입니까, 아니면 제가 잘못하고 있는 것입니까?PHP 5.4.3을 사용하고 있습니다.

이것은 이미 알려진 문제.

입니다.var_dump()@php.net –derick@php.net– derick@php.net

할 수 있습니다만, 숙박업소에는 접속할 수 없습니다.var_dump어쨌든 보여줘요.이 형식으로 날짜를 가져오려면 함수를 사용하십시오.

echo $mydate->format('Y-m-d H:i:s');

업데이트: PHP7.3에서 동작이 변경되어 원래 답변이 더 이상 작동하지 않습니다.모든 PHP 버전에서 동일한 결과를 얻으려면 다음과 같이 하십시오.>=7.3, 다음의 코드를 사용할 수 있습니다.

$dt = new DateTime();
$date = $dt->format('Y-m-d\TH:i:s.v');

참고로 원래 답변은 다음과 같습니다.

★★★★★★★★★를 호출하는 것 외에DateTime::format()리플렉션을 사용하여 속성에 액세스할 수 있습니다.

<?php

$dt = new DateTime();
$o = new ReflectionObject($dt);
$p = $o->getProperty('date');
$date = $p->getValue($dt);

은 사용법보다 더 빠릅니다.format()format()는 이미 포맷된 타임링을 포맷합니다.이치노

그러나 이는 PHP의 문서화된 동작이 아니므로 언제든지 변경될 수 있습니다.

DateTime의 날짜 속성이 보호됩니다.

포맷 기능으로 날짜를 표시할 수 있습니다.

<?php

try {
    $time = new DateTime();
    echo($time->format("Y-m-d H:i:s"));
} catch (Exception $e) {
}

또는 어레이로 변환할 수 있습니다.

<?php

try {
    $time = (array) new DateTime();
    var_dump($time["date"]);
} catch (Exception $e) {
}

알 수 , 이지만, 만약 이 '부작용'인 경우, 'PHP'의 이라면, 'PHP'는 'PHP'입니다.var_dump()★★★★★★★★★★★★★★★★★…

echo ((array) new DateTime())['date']; // Works in PHP 7.

내가 확신하는 것은 만약 그 특성이DateTime우리가 사용하려고 했던 곳에서 사용할 수 있게 되었을 것입니다.그러나 많은 내부 클래스와 마찬가지로 그렇지 않으므로 코드를 수정하기 위해 "해키" 또는 "귀여운" 방법에 의존해서는 안 됩니다.대신 API를 사용해야 합니다.

echo (new DateTime())->format('Y-m-d H:i:s');

만족하지 못할 경우 클래스를 연장하거나 확장해 주는 Carbon을 사용할 수 있습니다.

echo (new Carbon())->toDateTimeString();

하면var_dump()오브젝트의 가짜 출력을 만듭니다.

속성 날짜를 묻기 전에 var_Dump를 사용하면 모든 것이 정상적으로 작동합니다.

$mydate = new DateTime();
var_Dump($mydate);
echo '<br>';
echo $mydate->date;

이 기능은 다음과 같습니다.

object(DateTime)#1 (3) { ["date"]=> string(26) "2017-04-11 08:44:54.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "America/New_York" }
2017-04-11 08:44:54.000000

오브젝트에 대한 속성 날짜도 표시됩니다.나는 이 행동을 이해할 수 없다.var_Dump를 코멘트만 하면 다시 에러가 발생합니다.

언급URL : https://stackoverflow.com/questions/14084222/why-cant-i-access-datetime-date-in-phps-datetime-class

반응형