두 날짜 사이의 날짜인지 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 AM
24일이 작은 속임수가 내게 도움이 되었다.
심플한 솔루션:
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
'source' 카테고리의 다른 글
YAML은 5e-6을 번호가 아닌 문자열로 로드합니다. (0) | 2023.02.08 |
---|---|
대량 가져오기/삭제 후 WordPress 분류법(카테고리/태그)의 개수 필드를 업데이트하는 방법 (0) | 2023.02.08 |
"select from" 구문을 사용하지 않고 MySQL 테이블이 존재하는지 확인하시겠습니까? (0) | 2023.01.27 |
Jackson databind 열거형 대소문자를 구분하지 않음 (0) | 2023.01.27 |
React의 useState()는 무엇입니까? (0) | 2023.01.27 |