source

두 날짜 사이의 날짜인지 PHP 확인

manysource 2023. 1. 27. 21:24

두 날짜 사이의 날짜인지 PHP 확인

Stackoverflow에서 이 코드를 입수하여 오늘 날짜로 변경하였습니다.

오늘 두 날짜가 맞는지 확인하고 싶어요.근데 이거 안 되네.제가 무엇을 빠뜨리고 있나요?

$paymentDate = date('d/m/Y');
echo $paymentDate; // echos today! 
$contractDateBegin = date('d/m/Y', '01/01/2001');
$contractDateEnd = date('d/m/Y', '01/01/2015');

if ($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd)
{
  echo "is between";
}
else
{
echo "NO GO!";  
}

편집: 사용<=또는>=오늘 날짜를 세는 거예요.

이것은 당신의 코드에 대한 정답입니다.strtotime() php 함수를 사용합니다.

$paymentDate = date('Y-m-d');
$paymentDate=date('Y-m-d', strtotime($paymentDate));
//echo $paymentDate; // echos today! 
$contractDateBegin = date('Y-m-d', strtotime("01/01/2001"));
$contractDateEnd = date('Y-m-d', strtotime("01/01/2012"));
    
if (($paymentDate >= $contractDateBegin) && ($paymentDate <= $contractDateEnd)){
    echo "is between";
}else{
    echo "NO GO!";  
}

날짜 문자열은 비교할 수 없습니다.PHP를 사용하는 것은 좋은 습관입니다.DateTime대신 오브젝트:

$paymentDate = new DateTime(); // Today
echo $paymentDate->format('d/m/Y'); // echos today! 
$contractDateBegin = new DateTime('2001-01-01');
$contractDateEnd  = new DateTime('2015-01-01');

if (
  $paymentDate->getTimestamp() > $contractDateBegin->getTimestamp() && 
  $paymentDate->getTimestamp() < $contractDateEnd->getTimestamp()){
  echo "is between";
}else{
   echo "NO GO!";  
}

시간이 중요한 경우:

$paymentDate = strtotime(date("Y-m-d H:i:s"));
$contractDateBegin = strtotime("2014-01-22 12:42:00");
$contractDateEnd = strtotime("2014-01-22 12:50:00");

if($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd) {
   echo "is between";
} else {
    echo "NO GO!";  
}    

러튼의 대답에 근거합니다.내 트위스트를 더해야겠다고 생각했어:)

function dateIsInBetween(\DateTime $from, \DateTime $to, \DateTime $subject)
{
    return $subject->getTimestamp() > $from->getTimestamp() && $subject->getTimestamp() < $to->getTimestamp() ? true : false;
}

$paymentDate       = new \DateTime('now');
$contractDateBegin = new \DateTime('01/01/2001');
$contractDateEnd   = new \DateTime('01/01/2016');

echo dateIsInBetween($contractDateBegin, $contractDateEnd, $paymentDate) ? "is between" : "NO GO!";

또 다른 해결책은 Ymd로 표기된 날짜를 고려하는 것입니다.

이 "형식"으로 작성하면 날짜를 쉽게 비교할 수 있습니다.

$paymentDate       = date('Ymd'); // on 4th may 2016, would have been 20160504
$contractBegin     = 20010101;
$contractEnd       = 20160101;
echo ($paymentDate >= $contractBegin && $paymentDate <= $contractEnd) ? "Between" : "Not Between";

이것은 항상 연중 매일 작동하며 기능이나 변환에 의존하지 않습니다(PHP는 다음 값을 고려합니다).$paymentDate의 내적 가치와 비교하다contractBegin그리고.contractEnd).

날짜를 문자열로 비교하고 있습니다. 비교가 사전 편찬이기 때문에 이 문자열은 작동하지 않습니다.텍스트 파일을 정렬할 때와 같은 문제입니다.행은20행 뒤에 나타나다100그 내용은 숫자가 아니라 ASCII 코드의 시퀀스로 취급되기 때문입니다.또한 타임스탬프가 예상되는 문자열 형식(두 번째 인수)을 사용하고 있기 때문에 작성된 날짜가 모두 잘못되었습니다.

이 대신 타임스탬프를 비교해야 합니다.DateTime예를 들어 다음과 같습니다.

 $paymentDate = date_create();
 $contractDateBegin = date_create_from_format('d/m/Y', '01/01/2001');
 $contractDateEnd = date_create_from_format('d/m/Y', '01/01/2015');

그러면 기존 조건이 올바르게 작동합니다.

귀찮아서:

$paymentDate = new DateTime();
$contractStartDate = new Datetime('01/01/2001');
$contractEndDate = new Datetime('01/01/2015');
$payable = $paymentDate < $contractEndDate && $contractStartDate > $paymentDate; //bool

var_dump($payable)

표시:

bool(false)

함수로서

function isPayable(DateTime $payDate, DateTime $startDate, DateTime $endDate):bool 
{
    return $payDate > $startDate && $payDate < $endDate;
}

var_dump(isPayable(new DateTime(), new Datetime('01/01/2001'), new DateTime('01/01/2015')));
var_dump(isPayable(new DateTime('2003-03-15'), new Datetime('2001-01-01'), new DateTime('2015-03-01')));



표시:

bool(false)
bool(True)

괄호 날짜를 역동적으로 할 필요가 있는 경우.

$todayStr = date('Y-m-d');
$todayObj=date('Y-m-d', strtotime($todayStr));
$currentYrStr =  date('Y');
$DateBegin = date('Y-m-d', strtotime("06/01/$currentYrStr"));
$DateEnd = date('Y-m-d', strtotime("10/01/$currentYrStr"));
if (($todayObj > $contractDateBegin) && ($paymentDate < $contractDateEnd)){
    $period="summer";
}else{
   $period="winter";  
}

mktime(시, 분, 초, 월, 일, 년) 기능을 사용할 수 있습니다.

$paymentDate = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$contractDateBegin = mktime(0, 0, 0, 1, 1, 2001); 
$contractDateEnd =  mktime(0, 0, 0, 1, 1, 2012);

if ($paymentDate >= $contractDateBegin && $paymentDate <= $contractDateEnd){
    echo "is between";
}else{
    echo "NO GO!";  
}

주의해 주십시오.Datetime()있는 그대로의 오브젝트@luttkens의 간결하고 깔끔한 버전은 위의 답변입니다.

$paymentDate       = new DateTime(); // Today
$contractDateBegin = new DateTime('2001-01-01');
$contractDateEnd   = new DateTime('2015-01-01');

if ($paymentDate >= $contractDateBegin && $paymentDate < $contractDateEnd) {
  // is in between
}

직접 사용

$paymentDate = strtotime(date("d-m-Y"));
$contractDateBegin = strtotime("01-01-2001");
$contractDateEnd = strtotime("01-01-2015");

Strtotime 매뉴얼에 기재된 PHP의 32비트 날짜 범위에 대해 귀하의 2015년 1월 1일이 유효하기 때문에 비교는 문제가 없습니다.

다른 솔루션(날짜 형식이 항상 YYYY/MM/DD(리드 제로가 있는 경우)은 max() 및 min() 함수입니다.다른 모든 답변도 yyy-mm-dd 형식이라고 가정하고 있습니다.또, 파일 시스템의 폴더에 대해서, 날짜순으로 정렬하고 싶은 경우는, 일반적인 명명 룰입니다.

다른 사람이 말했듯이 스트링을 비교할 수 있는 숫자의 순서를 지정하면 strtotime() 함수는 필요 없습니다.

예:

$biggest = max("2018/10/01","2018/10/02");

장점은 두 날짜를 비교하는 대신 더 많은 날짜를 넣을 수 있다는 것입니다.

$biggest = max("2018/04/10","2019/12/02","2016/03/20");

날짜가 두 날짜 사이에 있는지 확인하려면 min()과 max()의 결과를 비교할 수 있습니다.

$startDate="2018/04/10";
$endDate="2018/07/24";
$check="2018/05/03";
if(max($startDate,$check)==min($endDate,$check)){
    // It's in the middle
}

다른 날짜 형식에서는 작동하지 않지만, 그 형식에서는 작동합니다.초로 변환할 필요도 없고 날짜 함수도 필요 없습니다.

위의 방법은 유용하지만 시간이 12:00 AM/PM에서 01:00 AM/PM 사이이면 오류가 발생하므로 완전 방지는 아닙니다.이 방법은 타이밍 사이에 있는 "No Go"를 반환합니다.같은 코드의 코드를 다음에 나타냅니다.

$time = '2019-03-27 12:00 PM';

$date_one = $time; 
$date_one = strtotime($date_one);
$date_one = strtotime("+60 minutes", $date_one);
$date_one =  date('Y-m-d h:i A', $date_one);

$date_ten = strtotime($time); 
$date_ten = strtotime("-12 minutes", $date_ten); 
$date_ten = date('Y-m-d h:i A', $date_ten);

$paymentDate='2019-03-27 12:45 AM';

$contractDateBegin = date('Y-m-d h:i A', strtotime($date_ten)); 
$contractDateEnd = date('Y-m-d h:i A', strtotime($date_one));

echo $paymentDate; 
echo "---------------"; 
echo $contractDateBegin; 
echo "---------------"; 
echo $contractDateEnd; 
echo "---------------";

$contractDateEnd='2019-03-27 01:45 AM';

if($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd)  
{  
 echo "is between";
} 
else
{  
  echo "NO GO!";  
}

됩니다."NO Go"12:45 > 01:45

, 「출고일」이 되어 있는 것을 ."AM"「」의 값01:00 AM로로 합니다.12:00 AM24일이 작은 속임수가 내게 도움이 되었다.

심플한 솔루션:

function betweenDates($cmpDate,$startDate,$endDate){ 
   return (date($cmpDate) > date($startDate)) && (date($cmpDate) < date($endDate));
}

치치때때때때때제제봐봐봐봐봐봐봐봐봐봐 。★★★★★★★★★★★★★★★★★★★★★★★★★★★★★이치노 다.time() ★★★★★★★★★★★★★★★★★」strtotime()int합니다.

if (time()>=strtotime("27.07.2022") && time()<strtotime("29.07.2022")){
function get_format($df) {

    $str = '';
    $str .= ($df->invert == 1) ? ' - ' : '';
    if ($df->y > 0) {
        // years
        $str .= ($df->y > 1) ? $df->y . ' Years ' : $df->y . ' Year ';
    } if ($df->m > 0) {
        // month
        $str .= ($df->m > 1) ? $df->m . ' Months ' : $df->m . ' Month ';
    } if ($df->d > 0) {
        // days
        $str .= ($df->d > 1) ? $df->d . ' Days ' : $df->d . ' Day ';
    } 

    echo $str;
}

$yr=$year;
$dates=$dor;
$myyear='+'.$yr.' years';
$new_date = date('Y-m-d', strtotime($myyear, strtotime($dates)));
$date1 = new DateTime("$new_date");
$date2 = new DateTime("now");
$diff = $date2->diff($date1);

언급URL : https://stackoverflow.com/questions/19070116/php-check-if-date-between-two-dates