日付を入力するテキストボックスがあります。
ユーザーが入力した日付が将来のものか今日のものかを確認するには、どのようなコードが必要ですか?
また、ユーザーに日付を dd/mm/yyyy 形式で入力してもらいたいです。
それらのいずれかが失敗した場合、コードはエラーを返します。
日付を入力するテキストボックスがあります。
ユーザーが入力した日付が将来のものか今日のものかを確認するには、どのようなコードが必要ですか?
また、ユーザーに日付を dd/mm/yyyy 形式で入力してもらいたいです。
それらのいずれかが失敗した場合、コードはエラーを返します。
DateTimeクラスを使用して、この比較を行うこともできます。
$now = new DateTime();
$user_date = DateTime::createFromFormat('d/m/Y', $userDate);
if ($user_date >= $now)
{
echo 'Date is not in the past';
}
この解決策をお勧めします:
/**
* Is future date
*
* Checks if given date is today
* or in the future.
*
* @param string $date
*
*
* @return bool
*
*/
protected function isFutureDate($date)
{
// assuming the date is in this format
// (I use value objects for these things so that
// I don't have to repeat myself)
$date = DateTimeImmutable::createFromFormat('d-m-Y', $date);
$today = DateTimeImmutable::createFromMutable(new DateTime());
return $date->getTimestamp() >= $today->getTimestamp();
}
他の日付クラスによって拡張された次の Date オブジェクトを使用します。他の日付クラスには、この基本クラスから拡張された独自のルール (日付は将来でなければならないなど) があります。
/**
* Class DateValueObject
*
*
*
* @package Hidden\Model\Shared\ValueObject
*
*/
abstract class DateValueObject extends ValueObject
implements DateValueObjectContract
{
/**
* @var DateValueObject
*
*/
protected $value;
/**
* Initialises the Date.
*
* @param $date
*
* @throws InvalidDateException
*
*/
public function __construct($date)
{
if (is_string($date)) {
$this->value = $this->setDate($date);
} else {
throw new InvalidDateException(
'String Expected. Got: ' .$date
);
}
}
/**
* Set valid date.
*
* @param string $date
*
* @return DateTimeImmutable
*
* @throws InvalidDateException
*/
protected function setDate($date)
{
try {
$d = DateTimeImmutable::createFromFormat('d-m-Y', $date);
if($d && $d->format('d-m-Y') == $date) {
return $d;
} else {
$d = DateTimeImmutable::createFromFormat('d/m/Y', $date);
if($d && $d->format('d/m/Y') == $date) {
return $d;
}
throw new InvalidDateException(
'Date cannot be formatted: ' .$date
);
}
} catch (\Exception $e) {
throw new InvalidDateException(
'For date: ' .$date .' with message' .$e->getMessage()
);
}
}
/**
* Get the date to string
*
* @param string $format
*
* @return string
*
*/
public function toString($format = 'd/m/Y')
{
return $this->value->format($format);
}
/**
* Get the date as immutable object.
*
*
* @return DateTimeImmutable|Date
*
*/
public function toDateObject()
{
return $this->value;
}
}
編集: コードの最初のブロックは、日付が未来かどうかをチェックすることに注意してください。コードを繰り返します。代わりにこれをメソッドに入れて、必要なたびにコピーして貼り付け続けるか、それ以外の場合は単に拡張するだけで、全体的に機能することがわかります。
私の例では、「dmY」と「d/m/Y」の両方を受け入れ、それに応じてフォーマットを処理します。結局のところ、php DateTimeImmutable オブジェクトはまだありますが、それ自体を構築する方法を知っているオブジェクトです。
使用する
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
マニュアルページから
パラメータを入力して減算します
time()
ゼロより大きい場合、それは未来です