2013-10-24 1 views
0

) PHP의 시스템 날짜를 변경할 수 있습니까? 디버깅/테스트 목적으로 사용하고 싶습니다.PHP의 시스템 날짜를 바꿀 수 있습니까? (

//Test 1 (2010-01-01) 
$datetime = new DateTime(); //(2010-01-01) 

//Test 2 (2010-02-01) 
$datetime = new DateTime(); //(2010-02-01) 

다른 시스템의 개발자가 동일한 시스템에서 작업하기 때문에 실제 시스템 시계를 변경할 수 없습니다. 나는 이것이 가능하거나 누군가가 좋은 속임수를 알고 있기를 바랄뿐입니다.

내가 phpinfo()를 인쇄 할 때;

Timezone Database internal 

어쩌면 그것은 "수동"및 광고와 같은 뭔가 변화의 120

감사와 시간대 : 나는 다음과 같은 라인을 참조!

+2

이것은 각 개발자에게 가상 머신을 사용하는 좋은 사례입니다 ... – feeela

+0

그래, 사실이긴하지만 지금은 그렇지 않습니다.) –

+0

그래서 가능한 경우, 내가 말한대로 내 대답은 대답은 아니오, 불가능한 것은 아니다. – Legionar

답변

3

캡슐화 문제와 비슷하게 들립니다. date() 또는 time()의 모든 멘션을 검색하고 $ site-> getDisplayedDate() 또는 다른 코드로 바꾸는 것이 어떻습니까?

나는 너의 고통을 느낀다. 그러나 나는 이것을 할 방법이 없다고 생각한다. 이 방법으로 생각 해보세요. 관련이없는 코드에서 time()을 호출하면 향후 3 주간 날짜가 부여됩니다.

에만 시간대 (그리고 당연히에만 몇 시간 앞으로/뒤로하고, 전달하지 하루 종일)를 변경할 수 있지만 올바른 솔루션을하지 이잖아 ...

+0

코드가 좋으므로 문제가 없으므로 변경해야하는 이유는 없습니다. 정말 목적을 테스트하고 시간을 날아서 내 페이지를 새로 고칠 수 있습니다. 날짜는 1 개월입니다. 시간대를 +120 시간으로 변경하려고 생각했습니다. –

+2

나는 그렇게 생각하지 않지만 시간대를 변경할 수 있습니다. +120 시간 ... – Legionar

+0

그럼 다른 솔루션 =) 감사합니다! –

2

기본값을 확장 자신의 DateTime 클래스를 만들 수 DateTime

<?php 
    class CustomDateTimeVariables { 
     public static $date = 'now'; 
    } 

    class CustomDateTime extends DateTime { 
     public function __construct($time = null, DateTimeZone $timezone = null) { 
      if ($time === null) { 
       $time = CustomDateTimeVariables::$date; 
      } 
      if ($timezone !== null) { 
       parent::__construct($time, $timezone); 
      } else { 
       parent::__construct($time); 
      } 
     } 
    } 

    CustomDateTimeVariables::$date = '2010-01-01'; 
    $datetime1 = new CustomDateTime(); 

    CustomDateTimeVariables::$date = '2010-01-02'; 
    $datetime2 = new CustomDateTime(); 

    var_dump($datetime1->Format('Y-m-d H:i:s')); //"2010-01-01 00:00:00" 
    var_dump($datetime2->Format('Y-m-d H:i:s')); //"2010-01-02 00:00:00" 
?> 

DEMO

당신은 또한 아주 쉽게 기본 시간을 설정할 수 있습니다이 방법 (CustomDateTimeVariables을 확인하십시오 따라서 동작을 변경)가 게재 될 때

<?php 
    class CustomDateTimeVariables { 
     public static $date = 'now +120 hours'; 
    } 

    class CustomDateTime extends DateTime { 
     public function __construct($time = null, DateTimeZone $timezone = null) { 
      if ($time === null) { 
       $time = CustomDateTimeVariables::$date; 
      } 
      if ($timezone !== null) { 
       parent::__construct($time, $timezone); 
      } else { 
       parent::__construct($time); 
      } 
     } 
    } 

    $datetime = new CustomDateTime(); 

    var_dump($datetime->Format('Y-m-d H:i:s')); //"2013-10-29 13:37:39" 
?> 

.. 그리고, 당신은 단순히 다시 now에 기본값을 변경할 수 있습니다.

+0

그럴 수도 있지만 좋은 해결책은 아니라고 생각합니다. 왜냐하면 DateTime이 기능 테스트를 위해 사용되는 모든 장소를 변경해야하기 때문입니다. –

+0

@SanderVisser 저는 여러분과 동의합니다 - 실제로 "예쁜"방법은 없지만이 방법은 간단한 일괄 처리로 해결할 수있는 유일한 방법입니다 " 찾기/바꾸기 "를 선택하십시오. – h2ooooooo

+0

시간대 데이터베이스를 변경하는 방법이 있었으면합니다. 같은 것 add_timezone ("Debug/Zone1", "+1200"); –

관련 문제