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.