PHP로 1 일 빼기


83

Drupal CMS에서 나오는 날짜 개체를 가져 와서 하루를 빼고 두 날짜를 모두 인쇄하려고합니다. 여기에 내가 가진 것

$date_raw = $messagenode->field_message_date[0]['value'];

print($date_raw);

//this gives me the following string: 2011-04-24T00:00:00

$date_object = date_create($date_raw);

$next_date_object = date_modify($date_object,'-1 day');

print('First Date ' . date_format($date_object,'Y-m-d'));

//this gives me the correctly formatted string '2011-04-24'

print('Next Date ' . date_format($next_date_object,'Y-m-d'));

//this gives me nothing. The output here is always blank

그래서 원래 날짜 개체가 잘 나오는 이유를 이해하지 못하지만 추가 날짜 개체를 만들고 하루를 빼서 수정하려고하는데 그렇게 할 수없는 것 같습니다. 출력은 항상 공백으로 나옵니다.

답변:


147

당신은 시도 할 수 있습니다:

print('Next Date ' . date('Y-m-d', strtotime('-1 day', strtotime($date_raw))));

1
당신과 함께 $ date_raw 동일한 형식을 얻을 수 있습니다$date_raw = date("r");
sHaDeoNeR

5
조심해! 2038 년 이후의 날짜를 처리하는 경우 PHP의 정수 크기 제한으로 인해 작동하지 않습니다 (적어도 32 비트 플랫폼에서). 이 경우 가장 안전한 해결책은 사용하는 것입니다 DateTime( 여기 참조 ).
Tip-Sy

61
 date('Y-m-d',(strtotime ( '-1 day' , strtotime ( $date) ) ));

36
$date = new DateTime("2017-05-18"); // For today/now, don't pass an arg.
$date->modify("-1 day");
echo $date->format("Y-m-d H:i:s");

DateTime을 사용하면 날짜를 조작하는 동안 겪는 두통의 양이 크게 감소했습니다.


6
date_createDateTime생성자 를 호출하는 절차 적 메서드로 ,을 사용하지 않고 3 줄을 1로 줄일 수 있습니다 new. Ieecho date_create('2017-05-18')->modify('-1 day')->format('Y-m-d H:i:s');
Armfoot

음, 원래 asnwer의 코드는 다음과 같이 한 줄로 작성할 수도 있습니다.(new \DateTime("2017-05-18"))->modify("-1 day")->format("Y-m-d H:i:s")
Scofield

22

객체 지향 버전

$dateObject = new DateTime( $date_raw );
print('Next Date ' . $dateObject->sub( new DateInterval('P1D') )->format('Y-m-d');

당신의 대답은 그것을 빼는 대신 하루를 더합니다. 그 외에는 내가 선호하는 솔루션이 될 것입니다.
Burki

18

한 줄의 옵션은 다음과 같습니다

echo date_create('2011-04-24')->modify('-1 days')->format('Y-m-d');

온라인 PHP 편집기 에서 실행합니다 .


mktime 대안

문자열 메서드를 사용하거나 계산에 들어가거나 추가 변수를 생성하지 않으려면 mktime 은 다음과 같은 방식으로 빼기와 음수 값을 지원합니다.

// Today's date
echo date('Y-m-d'); // 2016-03-22

// Yesterday's date
echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-1, date("Y"))); // 2016-03-21

// 42 days ago
echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-42, date("Y"))); // 2016-02-09

//Using a previous date object
$date_object = new DateTime('2011-04-24');
echo date('Y-m-d',
  mktime(0, 0, 0,
     $date_object->format("m"),
     $date_object->format("d")-1,
     $date_object->format("Y")
    )
); // 2011-04-23

온라인 PHP 편집기


13

현재 코드가 작동하지 않는 이유는 확실하지 않지만 날짜 개체가 특별히 필요하지 않으면 작동합니다.

$first_date = strtotime($date_raw);
$second_date = strtotime('-1 day', $first_date);

print 'First Date ' . date('Y-m-d', $first_date);
print 'Next Date ' . date('Y-m-d', $second_date);

감사합니다 Clive! 그것은 나를 위해 일했습니다 ... 예, 실제로 날짜 개체가 필요하지 않았으며 형식이 지정된 날짜를 인쇄하면되었습니다.
td-dev

7

Php 수동 strtotime 함수 주석에서 가져온 Answear :

echo date( "Y-m-d", strtotime( "2009-01-31 -1 day"));

또는

$date = "2009-01-31";
echo date( "Y-m-d", strtotime( $date . "-1 day"));

4

다음과 같이 간단합니다.

date("Y-m-d", strtotime("-1 day"));

date("Y-m-d", strtotime("-1 months"))


3

방법 : 먼저 유닉스 타임 스탬프로 변환하고 60 * 60 * 24 (정확히 1 초 단위)를 뺀 다음 날짜를 가져옵니다.

$newDate = strtotime($date_raw) - 60*60*24;
echo date('Y-m-d',$newDate);

참고 : apokryfos가 지적했듯이, 이는 기술적으로 25 시간 또는 23 시간의 하루가있는 일광 절약 시간 변경으로 인해 사라집니다.


좋은 것, 나는 다음과 같이 만들었습니다. $ newDate = date_create ($ date_raw)-> getTimestamp ()-60 * 60 * 24;
Yevgeniy Afanasyev

이것은 세계의 소수가 시계를 +/- 1 시간 씩 움직여서 어느 정도 햇빛이 비치는 환상을 제공하는 2 일에서는 사실이 아닌 모든 날이 24 시간이라고 가정합니다. 그리고 윤초도 있습니다.
apokryfos

@apokryfos의 훌륭한 캐치입니다. 나는 이것을 매우 과학적인 계산에 사용하지 않을 것이지만 대부분의 경우 여전히 괜찮을 것입니다.
user3413723

-1

날짜에 1 년을 더한 다음 asp.net에서 1 일을 빼는 방법 C #

Convert.ToDateTime(txtDate.Value.Trim()).AddYears(1).AddDays(-1);

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