substr()函数未按预期工作

4

我只是想将日期的年份月份日期分别提取出来,以便按照我的意愿使用它。

我将当前日期存储在$today中,并使用substr()从中提取字符串。但我得到了一些奇怪的结果。

我的当前代码:

$today = date("Y/m/d");

$_year = substr($today, 0,4);
$_month = substr($today, 5,7);
$_day = substr($today, 8, 10);

echo $_year . " " . $_month;
$_year 正常工作,但问题出在 $_month 上,无论我从哪个位置开始使用 substr(),月份和日期都会配对在一起。
有人能帮我解决这个问题吗?它让我发疯了。

你得到了什么输出? - Mr. Go
$_month = substr($today, 5,7); 应该改为 $_month = substr($today, 5,2); 你需要从位置5获取2个字符,而不是7个。 - Grumpy
@Grumpy 这里的罪魁祸首是 JavaScript! ;) - Naveen
6个回答

8
你应该查看 substr 函数的文档: http://php.net/manual/it/function.substr.php
该函数接受三个参数:$length 表示你想要从 $start 开始裁剪的字符串长度。
string substr ( string $string , int $start [, int $length ] )

在您的情况下,这将正常工作:
$today = date("Y/m/d");
$_year = substr($today, 0,4);
$_month = substr($today, 5,2);
$_day = substr($today, 8, 2);
echo $_year." ".$_month;

我在学习 PHP 之前学习了 JavaScript,所以犯了这个愚蠢的错误!谢谢伙计。 - Naveen

5

只需使用:

echo date("Y m");

如果你想将日期的每个部分存储在独立的变量中,我强烈建议使用DateTime类:
$dt = new DateTime();
$year = $dt->format('Y');
$month = $dt->format('m');
$day = $dt->format('d');

echo $dt->format('Y m');

你只是因为字符限制才要在那里加点吗?! - Rizier123
你认为为什么会有字符限制?因为有独角兽(开玩笑的 :)? (^现在你甚至为OP提供了更好的东西。) - Rizier123
这对于一个学习者来说有点复杂...不管怎样,感谢您! - Naveen
1
@DisortedCasanøva,如果你需要处理更多日期相关的工作,我建议你密切关注DateTime类,它会非常有用! - Rizier123
@DisortedCasanøva,我不明白你认为其中哪个更复杂。实际上,它比你的尝试要简单得多!(少函数调用,少逻辑)。请注意,简单性是“DateTime” API设计目标之一。 - hek2mgl
不知道为什么,我觉得这样做很容易...但是谢谢你兄弟,将来我会研究你提到的方法! - Naveen

5
这应该对你有用:
只需通过斜杠explode()您的日期,然后使用list()来分配变量。
list($year, $month, $day) = explode("/", $today);

1
$today = date("Y/m/d");
$_year = substr($today, 0,4);
$_month = substr($today, 5,7);
$_day = substr($today, 8, 10);
echo $_year." ".$_month;

应该是

$today = date("Y/m/d");
$_year = substr($today, 0,4);
$_month = substr($today, 5,2);
$_day = substr($today, 8, 2);
echo $_year." ".$_month;

1

您可以将它用作

$today = date("Y/m/d");
$today = explode("/", $today);
$year = $today[0];
$month = $today[1]; 
$day = $today[2];
echo $year . ' ' . $month .' '. $day; // 2015 05 05

很高兴能帮忙。@DisortedCasanøva - Narendrasingh Sisodia

1

substr() 的使用方法与你想的不同。
你可能认为是这样的: string substr ( string $string , int $start , int $end )
但实际上是这样的: string substr ( string $string , int $start , [int $length)

因此,在代码中使用 substr($today,5,2) 来获取月份,使用 substr($today,7,2) 来获取日期。


好的,我从JavaScript来,所以我认为它是罪魁祸首!谢谢,伙计! - Naveen
没问题,我懂你的感受 :) - tektiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接