提问人:Muhammad Dyas Yaskur 提问时间:10/31/2023 最后编辑:Muhammad Dyas Yaskur 更新时间:10/31/2023 访问量:80
如何使用 PHP 安全地解析月份?
How can I safely parse the month using PHP?
问:
为什么以下代码返回?应该是,对吧?12-2023
11-2023
$datetime = DateTime::createFromFormat('m-y', '11-23');
echo $datetime->format('m-Y');
这仅在我每月的 31 日(例如 10 月 31 日或 12 月 31 日)运行时才会发生。似乎当我们提供“11/23”作为日期时,今天是 10 月 31 日,PHP 将其解释为 11 月 1 日。当今天是 12 月 31 日时,它将其解释为次年的 1 月 1 日。
所以将被整写为 ,下面的代码将返回为:11-23
31-11-23
01-12-2023
$datetime = DateTime::createFromFormat('d-m-y', '31-11-23');
echo $datetime->format('d-m-Y');
我想使用此代码从信用卡/借记卡中解析月份和年份。如何使用 PHP 安全地解析月份?
我也试过了
echo date('m-Y',strtotime("10-23"));
但它回来了.01-1970
我真的需要在输入字符串前面加上日期吗?例如,如果输入是“11-23”,我是否需要在它前面添加“01-”才能使其与?DateTime::createFromFormat
答:
0赞
Álvaro González
10/31/2023
#1
当你用不完整的日期来馈送它时,PHP 会用当前日期/时间来填补空白。当这会产生无效日期时,PHP 会帮你“修复”它。
在撰写本文时,是 10 月 31 日。但 11 月只有 30 天,所以它提前到下个月。
$datetime = DateTime::createFromFormat('m-y', '11-23');
$now = new DateTime();
var_dump($datetime, $now)
object(DateTime)#1 (3) {
["date"]=>
string(26) "2023-12-01 09:48:48.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
object(DateTime)#2 (3) {
["date"]=>
string(26) "2023-10-31 09:48:48.010803"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
要回答您的问题,是的,如果您不希望以数字方式填充(并且可能是错误的),则必须指定一个月中的特定日期(甚至时间)。
2赞
shingo
10/31/2023
#2
只需在格式字符串前面加上 or 即可!
|
DateTime::createFromFormat('!m-y', '11-23');
文档说明:
如果 format 不包含字符 !然后是 未在格式中指定的生成日期/时间将设置为 当前系统时间。
如果 format 包含字符 !,则生成的部分 未以格式提供的日期/时间,以及左侧的值 side 的 !,将设置为来自 Unix 的相应值 时代。
评论
0赞
Álvaro González
10/31/2023
值得一提的是,Unix Epoch 是 1970 年 1 月 1 日星期四 00:00:00 UTC。
评论