PHP从2015年开始进入小年


PHP get small year from 2015?

朋友们好,我想像一样从全年中获得小年

$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。使用它可以构建您的逻辑。