DATETIME 형식 값에 1 일 추가


87

특정 상황에서는 DATETIME 형식의 변수 값에 1 일을 더하고 싶습니다.

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));

이를 수행하는 가장 좋은 방법은 무엇입니까?

답변:


63

PHP에서이 작업을 수행하려면 :

// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));

MySQL에 날짜를 추가하려면 :

-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

이것은 나에게 현재 시간을주지 않습니까? 사용자가 입력 한 시간을 유지해야합니다.
ian 09-08-17

예,하지만 사용자 지정 시간으로 변경해야하는 값을 표시했습니다. 당신은 대체 할 수 있습니다 time()strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}").
RaYell

이것은 여름 / 겨울 절약이 아닙니다! DST 저장 날짜 / 시간 조작을 사용하십시오
steven

208

PHP 5.2에 도입 된 DateTime 을 사용 하여이 작업을 수행하는 한 가지 방법이 더 있습니다 . strtotime()이것을 사용 하는 것과 달리 일광 절약 시간과 윤년을 고려합니다.

$datetime = new DateTime('2013-01-29');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

// Available in PHP 5.3

$datetime = new DateTime('2013-01-29');
$datetime->add(new DateInterval('P1D'));
echo $datetime->format('Y-m-d H:i:s');

// Available in PHP 5.4

echo (new DateTime('2013-01-29'))->add(new DateInterval('P1D'))->format('Y-m-d H:i:s');

// Available in PHP 5.5

$start = new DateTimeImmutable('2013-01-29');
$datetime = $start->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

아, 루프 다 루프 .
Funk Forty Niner 2015 년

9
: 하루 이상을 추가하는 경우, 당신도 복수 또는 단수를 사용하고 동일한 결과 등을 얻을 수 있습니다 +2 day또는 +2 days(분명히 +2 days더 의미 정확)
timhc22가

이 방법의 실질적인 차이점은 무엇입니까? 첫 번째 예는 나에게 가장 단순하고 의미가있는 것 같습니다.
BadHorsie 2017

24

날짜 시간 생성자는 매개 변수를 사용합니다 string time. 날짜 시간 형식$time 을 존중해야 합니다 .

예를 들어 몇 가지 유효한 값이 있습니다.

  • 'now' (기본값)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

따라서 귀하의 경우 다음을 사용할 수 있습니다.

$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02


10
  1. strtotime문자열을 타임 스탬프로 변환하는 데 사용
  2. 여기에 하루 추가 (예 : 86400 초 추가 (24 * 60 * 60))

예 :

$time = strtotime($myInput);
$newTime = $time + 86400;

1 일만 추가하는 경우 strtotime을 다시 사용하는 것은 아마도 과잉 일 것입니다.


그래서 TIMESTAMP로 변환 한 다음 DATETIME 형식으로 다시 변환해야합니까?
ian 2009-08-17

4
매일이 24 시간이 아니라는 점도 주목해야 할 것 같습니다. 세계 대부분의 지역에서 일광 절약 (서머 타임)은 1 년에 하루는 23 시간이고 다른 하루는 25 시간임을 의미합니다.
nickf

Ups. datetime을 타임 스탬프로 변환하므로 UTC 기반입니다. 그리고 UTC 날짜는 항상 24 시간입니다. date()현지 시간대 로 다시 변환 할 때 일광 절약 시간이 고려됩니다.
rabudde

5

당신이 사용할 수있는

$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');


1

다음과 같이 사용할 수 있습니다.

$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));

요일을 일정하게 설정하고 아래와 같이 사용할 수도 있습니다.

if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));

0

서버 요청 시간을 사용하여 일을 추가합니다. 예상대로 작동합니다.

19/08/25 => 19/09/27

$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));

여기에 '+2 일'로 날짜를 추가합니다.


0

PHP 날짜에 날짜를 추가하는 더 간결하고 직관적 인 방법이 있습니다. 오해하지 마십시오. 그 PHP 표현은 훌륭하지만 항상 Google에서 처리하는 방법을 찾아야합니다. 나는 자동 완성 기능을 놓친다.

이러한 경우를 처리하는 방법은 다음과 같습니다.

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new OneDay()
))
    ->value();

저에게는 더 직관적이고 자동 완성이 즉시 작동합니다. 매번 솔루션을 검색 할 필요가 없습니다.

좋은 보너스로 결과 값의 형식에 대해 걱정할 필요가 없습니다. 이미 ISO8601 형식입니다.

이것은 머랭 라이브러리 입니다. 여기에 더 많은 예제가 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.