PHP에서 날짜 시간에 분 추가


98

나는 많은 구글링과 PHP 수동 읽기를 한 후 날짜 시간에 X 분을 추가하는 데 정말 고착되어 있습니다.

내가 가진 날짜 시간 형식은 다음과 같습니다.

2011-11-17 05:05: year-month-day hour:minute

추가 할 분은 0에서 59 사이의 숫자입니다.

분이 추가 된 입력 형식과 동일한 출력을 원합니다.

내 시도가 나를 어디로도 데려 가지 않는 것처럼 보이기 때문에 누군가가 작동하는 코드 예제를 줄 수 있습니까?

답변:


178
$minutes_to_add = 5;

$time = new DateTime('2011-11-17 05:05');
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));

$stamp = $time->format('Y-m-d H:i');

기간 동안 ISO 8601 표준 의 형태로 문자열 P{y}Y{m1}M{d}DT{h}H{m2}M{s}S를 Where {*}부품이 기간이 얼마나 오래 나타내는 숫자 값으로 대체됩니다.

예를 들어, P1Y2DT5S1 년, 2 일, 5 초를 의미합니다.

위의 예에서는 생성자 에게 PT5M(또는 5 분) 제공 합니다 DateInterval.


날짜 : 2011-11-18 00:00 5 분을 추가하면 결과적으로 2012-04-18 00:00이됩니다. `$ time = new DateTime ($ _ REQUEST [ '시작']); $ time-> add (new DateInterval ( 'P'. $ duration. 'M')); $ endTime = $ time-> format ( 'Ymd H : i'); echo $ endTime; `포맷팅에 대한 응용 프로그램, 오늘도이 문제를 해결할 수없는 것 같습니다 ^ _ ^
Luke B

2
DateTime이 strtotime보다 나은 점은 무엇입니까?
bozdoz 2011

11
'PT'는 무엇을 의미합니까?
NicholasJohn16

1
@bozdoz 어떤 방법이 "더 나은지"는 질문이 아닙니다. 예를 들어 PHP에서 날짜를 정렬하는 경우 유용한 strtotimeUnix 타임 스탬프를 생성합니다 integer. 이 DateTime클래스는 객체 및 절차 스타일 작업에 대한 옵션을 제공합니다. 더 읽기 쉽고 서로 다른 시간대 간의 차이를 더 잘 지원합니다. 예를 들어 동일한 데이터 인스턴스에서 가져온 다양한 시간대의 날짜를 출력하는 프로젝트가있는 경우입니다.
DrewT

2
@ NicholasJohn16 php.net/manual/en/dateinterval.construct.php >> 형식은 "마침표"를 나타내는 문자 P로 시작합니다. 각 기간 기간은 정수 값과 기간 지정자로 표시됩니다. 기간에 시간 요소가 포함 된 경우 사양의 해당 부분 앞에 문자 T가옵니다.
vee

114

PHP의 DateTime 클래스 에는 이해하기 쉬운 텍스트를 가져 오는 유용한 수정 메소드가 있습니다.

$dateTime = new DateTime('2011-11-17 05:05');
$dateTime->modify('+5 minutes');

또한 문자열 보간 또는 연결을 사용하여 매개 변수화 할 수 있습니다.

$dateTime = new DateTime('2011-11-17 05:05');
$minutesToAdd = 5;
$dateTime->modify("+{$minutesToAdd} minutes");

10
가장 짧고 멋진!

1
두 가지 상위 답변 모두 훌륭하고 잘 작동하지만이 답변을 선호합니다. 더 간단하고 직관적 인 것 같습니다.
HartleySan

38
$newtimestamp = strtotime('2011-11-17 05:05 + 16 minute');
echo date('Y-m-d H:i:s', $newtimestamp);

결과는

2011-11-17 05:21:00

라이브 데모는 here

strtotime아직 익숙하지 않다면 , php.net그것이 큰 힘이라는 것을 발견하는 것이 좋습니다 :-)


1
가장 이해하기 쉬운 사람
Naveen DA

19

네이티브 함수로 쉽게이 작업을 수행 할 수 있습니다.

strtotime('+59 minutes', strtotime('2011-11-17 05:05'));

그래도 Tim이 게시 한 DateTime 클래스 메서드를 권장합니다.


7

나는 이것이 시간대를 다룰 때도 도움이 될 것이라고 생각했습니다. 내 수정 된 솔루션은 위의 정답 인 @Tim Cooper의 솔루션을 기반으로합니다.

$minutes_to_add = 10;
$time = new DateTime();
**$time->setTimezone(new DateTimeZone('America/Toronto'));**
$time->add(new DateInterval('PT' . $minutes_to_add . 'M'));
$timestamp = $time->format("Y/m/d G:i:s");

굵은 선인 3 행이 추가되었습니다. 나는 이것이 일부 사람들에게도 도움이되기를 바랍니다.


4

약간 늦게 대답했지만 내가 사용할 방법은 다음과 같습니다.

// Create a new \DateTime instance
$date = DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00');

// Modify the date
$date->modify('+5 minutes');

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

또는 PHP> = 5.4

echo (DateTime::createFromFormat('Y-m-d H:i:s', '2015-10-26 10:00:00'))->modify('+5 minutes')->format('Y-m-d H:i:s')

3

분을 포함하는 변수를 제공하려는 경우.

그렇다면 나는 이것이 이것을 달성하는 좋은 방법이라고 생각합니다.

$minutes = 10;
$maxAge = new DateTime('2011-11-17 05:05');
$maxAge->modify("+{$minutes} minutes");

3

솔루션으로 설정된 접근 방식이 왜 저에게 효과적이지 않았는지 모르겠습니다. 그래서 나는 누구에게나 도움이 될 수 있기를 희망하면서 나를 위해 일한 것을 여기에 게시하고 있습니다.

$startTime = date("Y-m-d H:i:s");

//display the starting time
echo '> '.$startTime . "<br>";

//adding 2 minutes
$convertedTime = date('Y-m-d H:i:s', strtotime('+2 minutes', strtotime($startTime)));

//display the converted time
echo '> '.$convertedTime;

2

사용하다 strtotime("+5 minute", $date);


예:

$date = "2017-06-16 08:40:00";
$date = strtotime($date);
$date = strtotime("+5 minute", $date);
echo date('Y-m-d H:i:s', $date);

1

Brad와 Nemoden이 위의 답변에서 언급했듯이 strtotime ()은 훌륭한 기능입니다. 개인적으로 표준 DateTime 개체가 많은 사용 사례에서 지나치게 복잡하다는 것을 알았습니다. 예를 들어 현재 시간에 5 분을 더하고 싶었습니다.

몇 가지 선택적 매개 변수가있는 문자열로 날짜를 반환하는 함수를 작성했습니다.
1.) time : String | 예 : "+5 분"(기본값 = 현재 시간)
2.) format : String | 예 : "Ymd H : i : s"(기본값 = "Ymd H : i : s O")

분명히 이것은 완전한 기능을 갖춘 방법이 아닙니다. 현재 날짜를 수정 / 포맷하는 빠르고 간단한 기능입니다.

function get_date($time=null, $format='Y-m-d H:i:s O')
{
    if(empty($time))return date($format);
    return date($format, strtotime($time));
}

// Example #1: Return current date in default format
$date = get_date(); 

// Example #2: Add 5 minutes to the current date
$date = get_date("+5 minutes"); 

// Example #3: Subtract 30 days from the current date & format as 'Y-m-d H:i:s'
$date = get_date("-30 days", "Y-m-d H:i:s"); 

0

이 작업을 수행하는 함수의 또 다른 예 : ( function.date의 경우 , DateInterval의 경우 에 따라 원하는대로 시간 및 간격 형식 변경 ) :

(또한 아래 함수대체 형식을 작성했습니다 .)

// Return adjusted time.

function addMinutesToTime( $dateTime, $plusMinutes ) {

    $dateTime = DateTime::createFromFormat( 'Y-m-d H:i', $dateTime );
    $dateTime->add( new DateInterval( 'PT' . ( (integer) $plusMinutes ) . 'M' ) );
    $newTime = $dateTime->format( 'Y-m-d H:i' );

    return $newTime;
}

$adjustedTime = addMinutesToTime( '2011-11-17 05:05', 59 );

echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL;

0

한 줄 mysql datetime 형식

$mysql_date_time = (new DateTime())->modify('+15 minutes')->format("Y-m-d H:i:s");

-1

변수를 사용하지 않고 :

 $yourDate->modify("15 minutes");
 echo $yourDate->format( "Y-m-d H:i");

변수 사용 :

 $interval= 15;
 $yourDate->modify("+{$interval } minutes");  
 echo $yourDate->format( "Y-m-d H:i");

무엇입니까 $yourDate? 이 답변은 몇 년 전에 게시 된 유사한 답변에 무엇을 추가합니까?
없음

Dear @ J.Money $ yourDate는 $ 변수 이름을 의미하며 아마도 내 대답은 100 년 후에 누군가에게 도움이 될 것입니다. 질문이 닫히지 않을 때까지 우리가 언제 대답해야하는지 상관 없습니다. 부정적인 표시를 이해하고 제거하기를 바랍니다.
Wajid khan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.