특정 상황에서는 DATETIME 형식의 변수 값에 1 일을 더하고 싶습니다.
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
이를 수행하는 가장 좋은 방법은 무엇입니까?
답변:
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);
time()
로 strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
.
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');
+2 day
또는 +2 days
(분명히 +2 days
더 의미 정확)
strtotime
문자열을 타임 스탬프로 변환하는 데 사용예 :
$time = strtotime($myInput);
$newTime = $time + 86400;
1 일만 추가하는 경우 strtotime을 다시 사용하는 것은 아마도 과잉 일 것입니다.
date()
현지 시간대 로 다시 변환 할 때 일광 절약 시간이 고려됩니다.
Zend Framework 에서 Zend_Date 클래스 사용을 시작하는 것이 좋습니다 . 나는 그것의 약간의 주제를 벗어난 것을 알고있다, 그러나 나는이 방법을 좋아할 것이다 :-)
$date = new Zend_Date();
$date->add('24:00:00', Zend_Date::TIMES);
print $date->get();
다음과 같이 사용할 수 있습니다.
$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)));
PHP 날짜에 날짜를 추가하는 더 간결하고 직관적 인 방법이 있습니다. 오해하지 마십시오. 그 PHP 표현은 훌륭하지만 항상 Google에서 처리하는 방법을 찾아야합니다. 나는 자동 완성 기능을 놓친다.
이러한 경우를 처리하는 방법은 다음과 같습니다.
(new Future(
new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
new OneDay()
))
->value();
저에게는 더 직관적이고 자동 완성이 즉시 작동합니다. 매번 솔루션을 검색 할 필요가 없습니다.
좋은 보너스로 결과 값의 형식에 대해 걱정할 필요가 없습니다. 이미 ISO8601 형식입니다.