您可以使用DateTime 类使用DateTime::createFromFormat()构造函数生成与给定日期字符串格式匹配的 DateTime 对象。
格式 ('my') 将匹配任何带有字符串模式 'mmyy' 的日期字符串,例如 '0620'。或者对于具有 4 位数年份的日期,使用格式“mY”,它将匹配具有以下字符串模式“mmyyyy”的日期,例如“062020”。使用DateTimeZone类指定时区也是明智的。
$expiryMonth = 06;
$expiryYear = 20;
$timezone = new DateTimeZone('Europe/London');
$expiryTime = \DateTime::createFromFormat('my', $expiryMonth.$expiryYear, $timezone);
有关更多格式,请参阅DateTime::createFromFormat页面。
但是 - 对于信用卡/借记卡的到期日期,您还需要考虑完整的到期日期和时间- 而不仅仅是月份和年份。
如果未指定DateTime::createFromFormat,默认情况下将使用该月的今天(例如 17)。这意味着信用卡在还剩几天时可能会出现过期。如果一张卡在 06/20(即 2020 年 6 月)到期,那么它实际上会在 2020 年 7 月 1 日 00:00:00 停止工作。修改方法可以解决此问题。例如
$expiryTime = \DateTime::createFromFormat('my', $expiryMonth.$expiryYear, $timezone)->modify('+1 month first day of midnight');
字符串'+1 month first day of midnight'
做了三件事。
- '+1 个月' - 添加一个月。
- 'first day of' - 切换到该月的第一天
- '午夜' - 将时间更改为 00:00:00
modify 方法对于许多日期操作非常有用!
所以要回答这个问题,这就是你所需要的——稍微调整格式以适应个位数的月份:
$expiryMonth = 6;
$expiryYear = 20;
$timezone = new DateTimeZone('Europe/London');
$expiryTime = \DateTime::createFromFormat(
'm-y',
$expiryMonth.'-'.$expiryYear,
$timezone
)->modify('+1 month first day of midnight');
$currentTime = new \DateTime('now', $timezone);
if ($expiryTime < $currentTime) {
// Card has expired.
}