您可以使用DateTime class 使用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 停止工作。modify 方法解决了这个问题。例如
$expiryTime = \DateTime::createFromFormat('my', $expiryMonth.$expiryYear, $timezone)->modify('+1 month first day of midnight');
字符串'+1 month first day of midnight' 做了三件事。
- '+1 个月' - 添加一个月。
- 'first day of' - 切换到当月的第一天
- 'midnight' - 将时间更改为 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.
}