2013-12-16 3 views
1

왜 이런 일이 발생하는지 알 수 없지만 한 번에 -10 분을 추가하면 작동하지 않습니다.문자열이 예상대로 작동하지 않습니다.

이 단순화 된 버전이다

$time = '08:30'; 

$time_minus_10m = strtotime($time) + strtotime("-10 min"); 

echo '<b>'.$time.'</b> -10 mins is <b>'.date('H:i', $time_minus_10m).'</b>'; 

그것은 출력 :

:

8시 반 -10 분 정상적으로 출력 1시 5분

이지만 08:30 -10 분은 08:20

+1

왜 당신이 기대합니까? 두 번째 호출은'$ time' 전에 10 분이 아닌 현재 시간보다 10 분 전에 계산됩니다. – Barmar

+0

'strtotime ("- 10 min")'이 -10 분을 두번째로 줄 것이라고 생각했습니다 ... –

+0

예,하지만 현재 시간과 관련이 있습니다. 관련이없는 변수의 시간이 아닙니다. – Barmar

답변

2

결합 해 보셨습니까? 격리에서

$time_minus_10m = strtotime("$time -10 minutes"); 

strtotime('-10 minutes') 그냥 10 분 현재 시간 전에 시간을 제공합니다; 어떤 다른 시간에 추가하는 것은 더 이상 의미가 없습니다.

이미 앵커 대상인 타임 스탬프가있는 경우이를 현재 시간 대신 사용되는 두 번째 매개 변수로 전달할 수 있습니다.

+0

오,이게 훨씬 더 의미가 있습니다! 감사! –

+0

후자의 코드 블록을 할 때'주의 : 부적절한 숫자 값이 나온다. '...'$ time'에 날짜가 없기 때문이라고 생각합니다. –

+0

@Arian : 그렇습니다. 따라서 타임 스탬프를 두 번째 매개 변수로 지정하는 것입니다. 날 잡았어. – AbraCadaver

1

strtotime() 통화 시간을 제공하지 않으므로 현재 시간에서 10 분을 뺍니다. 시도 :

$time_minus_10m = strtotime("-10 min", strtotime($time)); 
+0

두 번째 인수는 시간 문자열이 아닌 타임 스탬프 여야합니다. – Barmar

+0

Doh. 너무 빠르고 부주의합니다. – AbraCadaver

1
$time = new DateTime('08:30'); 
$cloned_time = clone $time; 
$time_minus_10m = $cloned_time->modify('-10 min'); 

echo '<b>'.$time->format('H:i').'</b> -10 mins is <b>'.$time_minus_10m->format('H:i').'</b>'; 
관련 문제