如何使用PHP获取当前年份?

1123
我想在网站的页脚放上版权声明,但我觉得年份过时会显得非常俗气。
我该如何使用PHP使年份自动更新?

716
echo date("Y"); - doub1ejack
2
我使用它时收到了一个警告。为了避免收到警告,我添加了date_default_timezone_set('UTC')。('UTC+1'不起作用...因为我刚开始学习PHP,所以无法告诉你更多)。可能有一些方法可以配置PHP以避免抛出警告(在像php.ini这样的配置文件中)。 - justin
5
这意味着你没有设置默认时区,PHP不喜欢这样。你可以在php.ini文件中设置默认时区,比如date.timezone = "America/Los_Angeles",或者在代码开头用date_default_timezone_set( "America/Los_Angeles" )来设置。 - Joshua Pinter
9
版权声明中的年份并没有太多的法律价值,但通常添加该年份是为了帮助想要了解版权是否仍然适用的人们。因此,它应该是作品发表的年份。仅使用当前年份实在没有任何意义...然而我已经看到它被无数次地这样做了。 - Stijn de Witt
8
我个人认为这已经成为了网页惯例,因此尽管你在技术上是正确的,但这并不是人们所期望的。事实仍然存在,即尽管在页脚上使用“版权所有2007年”的字样来标注一篇写于2007年的文章是技术上正确的,但访问该网站的用户很可能会认为该网站已被放弃。即使是拥有律师团队的大型企业也会在其网页上盖上当前年份的印章,即使这个年份是“2007-2015”。 - Nathan Hornby
显示剩余6条评论
32个回答

1412
您可以使用datestrftime。在这种情况下,我会说它并不重要,因为一年就是一年,不管怎样(除非有一个格式化年份的区域设置不同?)
例如:
<?php echo date("Y"); ?>

另外提一下,当使用PHP格式化日期时,如果想要将日期格式化为与默认设置不同的语言环境,就需要使用setlocale和strftime。根据PHP手册中对于date函数的说明:

如果要将日期格式化为其他语言, 应该使用setlocale()和strftime() 函数,而不是date()。

从这个角度来看,我认为最好尽可能地使用strftime,如果你的应用程序有远程本地化的可能性。如果没有这个问题,那就选择你最喜欢的一个。


6
@ErikvanBrakel,出于兴趣,泰国目前的年份是2556。不确定PHP语言环境是否考虑了这一点,但在完美的世界中应该会考虑 :) - Dirk Hartzer Waldeck
1
你可以简单地写成:date("Y"); - user352353
中日年份万岁!2016年 / 二千十六年 - Panzercrisis
4
如果我能在YouTube上这样做。“如果您正在<?php echo date(“Y”); ?>观看此视频,请点赞。” - Luka
是的,有很多不同的方式来格式化年份,例如泰国年份,即佛历(从西方计数加上543)。 - ZioBit
2
你也可以使用 now()->year... 它基本上是一样的。 - Ahmed Mansour

550
<?php echo date("Y"); ?>

35
不支持所有服务器的短标签,还有这个:http://programmers.stackexchange.com/questions/151661/is-it-bad-practice-to-use-tag-in-php。 - Dirk Hartzer Waldeck
5
在PHP 5.4中,你可以自由地使用上述的短echo标签。在视图中它们更加美观(在我看来)。 - Jimbo
1
@ShaneReustle,你忘了在结尾加分号了;)我知道在这种情况下它们并不重要,但对于初学者来说,这是一个好习惯:) - Dimitar

216

我极度懒惰的版权信息展示方式,能够自动更新:

&copy; <?php 
$copyYear = 2008; 
$curYear = date('Y'); 
echo $copyYear . (($copyYear != $curYear) ? '-' . $curYear : '');
?> Me, Inc.

今年(2008年),它会显示:

© 2008 Me, Inc.

明年,它会显示:

© 2008-2009 Me, Inc.

并且永远更新当前年份。


或者(PHP 5.3.0+)使用匿名函数的紧凑方式来实现,这样您就不会有变量泄漏,并且不会重复使用代码/常量:

&copy; 
<?php call_user_func(function($y){$c=date('Y');echo $y.(($y!=$c)?'-'.$c:'');}, 2008); ?> 
Me, Inc.

18
© <?php echo 2008 != date('Y') ? '2008 - ' . date('Y') : 2008; ?> 我的公司。 - hitautodestruct
1
我的一行代码版本:<?php echo '&copy; 2008',($year = gmdate("Y")) !== '2008'? ' - '.$year : '',' Me, Inc.'; ?> - ale5000

83

随着PHP朝着更加面向对象的方向发展,我惊讶地发现在这里没有人提到内置的DateTime类:

$now = new DateTime();
$year = $now->format("Y");

或者通过在实例化时访问类成员的一行代码(PHP>=5.4):

$year = (new DateTime)->format("Y");

33

32
strftime("%Y");

我喜欢strftime。这是一个很棒的函数,可以抓取/重新组合日期/时间的片段。
而且它还尊重区域设置,而日期函数却不会这样做。

1
关于strftime的注释,自8.1.0版本起已被弃用。 - Offbeatmammal

18

这个代码会给你本地时间:

$year = date('Y'); // 2008

还有这个UTC

$year = gmdate('Y'); // 2008

15

13

这是我做的:

<?php echo date("d-m-Y") ?>

下面是对其功能的一点解释:

d = day
m = month
Y = year

Y会给你四位数字(例如1990),而y则表示两位数字(例如90)。


该问题并未要求使用“d”或“m”。多年前,此页面上已提供使用“Y”的建议。此回答没有为本页面增加任何新的相关价值。 - mickmackusa

11

echo date('Y')可以获取当前年份,由于date()会返回当前日期,因此年份也会自动更新。


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