朋友们好,我想像一样从全年中获得小年
$smallYear = date('y',strtotime('2016'));
// it's return 16
// when i passed 2017
$smallYear = date('y',strtotime('2017'));
// it's return 16 means it's return current date
如何使用php从2016年获得16个,从2017年获得17个。下面是我生成年份的全部函数。
public static function getYears() {
$years = array();
$curYear = date("Y");
$limit = 16;
echo date('y',strtotime('2015'));
for ($x = $curYear; $x < $curYear + $limit; $x++) {
$xd = date('y',strtotime($x));
$years[$xd] = $x;
}
return $years;
}
我想把小年定为关键。我想要像一样的输出
array(
'16' => 2016,
'17' => 2017,
'18' => 2018,
'19' => 2019
)
感谢
<?php
function makeShortYear($theYear) {
return date('y',strtotime("$theYear-01-01"));
}
echo makeShortYear(2016) . "'n"; // 16
echo makeShortYear(2017) . "'n"; // 17
echo makeShortYear(1998) . "'n"; // 98
?>
您没有非常清楚地说明您的需求(两个示例输入不足以构建您希望程序总体表现的全貌(,但这就是您的意思吗?
3000年是行不通的,因为strtotime
是基于32位UNIX时间戳的,而这些时间戳并没有那么远。
这是所做的的替代方案:
<?php
function makeShortYear($theYear) {
return (new DateTime("$theYear-01-01"))->format("y");
}
echo makeShortYear(2016) . "'n"; // 16
echo makeShortYear(2017) . "'n"; // 17
echo makeShortYear(1998) . "'n"; // 98
echo makeShortYear(3000) . "'n"; // 00
echo makeShortYear(3001) . "'n"; // 01
?>
在这两种情况下,关键是通过添加任意的月份和日期来提供完整的日期作为输入。
尝试以下解决方案(http://ideone.com/fIv6wS):
function getYears() {
$years = array();
$curYear = date("Y");
$limit = 16;
echo date('y',strtotime('2015'));
for ($x = $curYear; $x < $curYear + $limit; $x++) {
$xd = $x % ((int)($curYear / 1000) * 1000);
$years[$xd] = $x;
}
return $years;
}
$smallYear = date('d-m-y H:i:s',strtotime('2017'));
这样做将始终显示当前年份,因为您只将小时和分钟传递给strtotime
方法。所以你得到的输出是16,而不是17。其结果是29-10-16 20:17:00
$smallYear = date('y',strtotime('+1 year'));
这会给你17或16,因为今年是16,所以你要加+1到今年,所以结果是17。使用它可以构建您的逻辑。