답변:
strtotime($var);
시간 값으로 바꿉니다
time() - strtotime($var);
이후 초를 제공합니다 $var
if((time()-(60*60*24)) < strtotime($var))
$var
마지막 날이 지 났는지 확인합니다 .
이 형식은 표준 문자열 비교에 완벽하게 적합합니다.
if ($date1 > $date2){
//Action
}
해당 날짜 형식으로 오늘 날짜를 얻으려면 다음을 사용하십시오 date("Y-m-d H:i:s")
.
그래서:
$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";
if ($date < $today) {}
그것은 그 형식의 아름다움입니다. 물론, 그 수 있습니다 당신의 정확한 상황에 따라, 덜 효율적뿐만 아니라 훨씬 더 편리하고 더 유지 보수 코드로 이어질 수 있습니다 - 우리는 더 많은 진정으로 알고 판단 전화를해야 할 것입니다.
올바른 시간대의 경우 예를 들어
date_default_timezone_set('America/New_York');
mm/dd/yyyy
형식으로 두 개의 날짜 시간 문자열을 날짜로 변환 한 다음 비교하는 것보다 여전히 빠릅니다 . 개발자가 시스템에서 여러 시간대의 날짜를 가질 때 항상 걱정합니다. 시스템에 날짜를 항상 단일 시간대로 저장 한 다음 필요한 시간대로 표시하는 것이 좋습니다. 나는 1998 년경 SQL 서버에서도 훨씬 빨리 정렬한다는 것을 깨달았을 때 yyyy-mm-dd
형식 (또는 yyyymmdd
)을 사용하기 시작했습니다 .
여기 있습니다 :
function isToday($time) // midnight second
{
return (strtotime($time) === strtotime('today'));
}
isToday('2010-01-22 00:00:00.0'); // true
또한 더 많은 도우미 기능이 있습니다.
function isPast($time)
{
return (strtotime($time) < time());
}
function isFuture($time)
{
return (strtotime($time) > time());
}
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
그 작업을 수행했습니다.
당신은 DateTime
수업을 사용할 수 있습니다 :
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2021-01-01 00:00:00");
비교 연산자 작동 * :
var_dump($past < $now); // bool(true)
var_dump($future < $now); // bool(false)
var_dump($now == $past); // bool(false)
var_dump($now == new DateTime()); // bool(true)
var_dump($now == $future); // bool(false)
var_dump($past > $now); // bool(false)
var_dump($future > $now); // bool(true)
DateTime 객체에서 타임 스탬프 값을 가져 와서 비교할 수도 있습니다.
var_dump($past ->getTimestamp()); // int(1262286000)
var_dump($now ->getTimestamp()); // int(1431686228)
var_dump($future->getTimestamp()); // int(1577818800)
var_dump($past ->getTimestamp() < $now->getTimestamp()); // bool(true)
var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)
* ===
두 개의 다른 DateTime 객체가 동일한 날짜를 나타내는 경우에도 비교할 때는 false 를 반환합니다.
$future
과거가되었습니다. : P
$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today) > strtotime($expiry)); //false or true
$var
OP에서도 저 와 동등한 것이 아닙니다
내 경험에 근거한 한 가지주의 사항, 만약 당신의 목적에만 날짜가 포함되어 있다면 타임 스탬프를 포함하도록주의하십시오 . 예를 들어 오늘이라고합니다 "2016-11-09"
. 타임 스탬프와 관련된 비교는 여기서 논리를 무효화합니다. 예,
// input
$var = "2016-11-09 00:00:00.0";
// check if date is today or in the future
if ( time() <= strtotime($var) )
{
// This seems right, but if it's ONLY date you are after
// then the code might treat $var as past depending on
// the time.
}
위의 코드는 옳아 보이지만 비교하려는 날짜 만 있다면 위의 코드가 올바른 논리가 아닙니다. 왜? time () 및 strtotime ()은 타임 스탬프 포함을 제공하기 때문입니다. 즉, 두 날짜가 같은 날에 있지만 시간의 차이가 중요합니다. 아래 예를 고려하십시오.
// plain date string
$input = "2016-11-09";
입력은 일반 날짜 문자열이므로 strtotime()
on $input
을 사용 하면 2016-11-09의 자정이라고 가정합니다. 따라서 time()
자정 이후에 언제든지 실행 $input
하면 같은 날에 있더라도 항상 과거로 간주 됩니다.
이 문제를 해결하려면 다음과 같이 간단히 코딩하면됩니다.
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
몇 년 후, 나는 지난 24 시간이 오늘이 아니라는 Bobby Jack의 관찰을 두 번째로 !!! 그리고 그 대답이 너무 많이 찬란하다는 것에 놀랐습니다 ...
특정 날짜가 다른 날짜보다 작거나 같거나 큰지 비교하려면 먼저 날짜를 "시작"으로 시작해야합니다. 다시 말해, 두 날짜 모두에 동일한 00:00:00 시간에 대해 이야기하고 있는지 확인하십시오. 다음과 같이 간단하고 우아하게 수행 할 수 있습니다.
strtotime("today") <=> strtotime($var)
경우는 $var
지정된 OP 같은 0시 0분 0초의 시간 부분이있다.
바꾸다 <=>
당신이 필요로하는 무엇 이건 (또는 PHP에서 이런 식으로 계속 7)
또한, 우리는 둘 다 동일한 시간대에 대해 이야기하고 있습니다. 위해 지원하는 시간대의 목록
w3schools의 Josua 답변 확대 :
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);
//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);
//now compare the two dates
if ($intDiff > 0) {echo '$date1 is in the past';}
else {echo 'date1 is today or in the future';}
이게 도움이 되길 바란다. stackoverflow에 대한 첫 번째 게시물!
시간과 날짜가있는 일을 하면 Carbon 이 가장 친한 친구입니다.
그런 다음 패키지를 설치하십시오.
$theDay = Carbon::make("2010-01-21 00:00:00.0");
$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))
lt =보다 작음, gt =보다 큼
질문에서와 같이 :
$theDay->gt(Carbon::today()) ? true : false;
그리고 훨씬 더;