How do I use PHP to get the current year?
Asked Answered
K

18

1139

I want to put a copyright notice in the footer of a web site, but I think it's incredibly tacky for the year to be outdated.

How would I make the year update automatically with PHP

Kranz answered 15/9, 2008 at 15:34 Comment(9)
I got a warning using that. Added date_default_timezone_set('UTC'); to avoid getting the warning. ('UTC+1' doesn't work... can't tell you much as just starting with PHP). Probably there's some way to configure PHP to avoid throwing the warnings though (in some config file like php.ini).Mesoglea
@Mesoglea This means you haven't set the default timezone and PHP doesn't like that. You can either set the default timezone in the php.ini file with something like date.timezone = "America/Los_Angeles" or you can set it at the beginning of your code with something like date_default_timezone_set( "America/Los_Angeles" ).Bisect
cheers Josh. I had taken the second approach because that's the solution I came across first. Good to know what to set in php.ini to have this in effect in all scripts.Mesoglea
NOTE: The year in a copyright notice does not really have much legal value, but is usually added to aid people who want to know whether the copyright still applies. As such it is supposed to be the year the work was published. Just using the current year really makes no sense whatsoever... However I have seen it done countless times.Wirehaired
@StijndeWitt nailed it. For the record, the copyright year is the date it was published, and really holds no actual value. That said, I accidentally ran into this because I was doing the exact same thing B-)Charades
@Stijn de Witt Although technically true, a copyright notice full-stop has no real purpose, copyright is automatic, you don't need to announce it. And given that most websites have a dynamic portion then the 'year it was published' would change on a regular basis (at least if we're including revisions), so having the year in the footer reflect the current year is perfectly sensible, as it's a good indicator that the content is current. Informally that's pretty much all it's used for, to say "This website is still current".Criminal
@NathanHornby I know it's automatic. Therefore the notice has no real legal value and is just informative. Therefore, putting always the current year in there is bad as it is disinformative it tells you absolutely nothing. Also, the copyright doesn't automatically apply to all content on the website. Instead it applies to each separate publication from the moment it was published. My point: Put the publication date there, or don't put it there at all. Don't script it to the current date.Wirehaired
I'd personally argue that it has become a web convention, so although you are technically correct, it's not what people expect. The fact remains that although having, i.e. "Copyright 2007, all rights reserved' emblazoned on the footer of a page containing an article written in 2007 is technically correct, visitors to the site are likely to assume that the site has been abandoned. Even large corporations with teams of lawyers still stamp their web pages with the current year, even if it's '2007-2015'.Criminal
Perhaps they believe changing the date resets the clock, and they are effectively re-publishing the work every day.Racialism
C
1431

You can use either date or strftime. In this case I'd say it doesn't matter as a year is a year, no matter what (unless there's a locale that formats the year differently?)

For example:

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

On a side note, when formatting dates in PHP it matters when you want to format your date in a different locale than your default. If so, you have to use setlocale and strftime. According to the php manual on date:

To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().

From this point of view, I think it would be best to use strftime as much as possible, if you even have a remote possibility of having to localize your application. If that's not an issue, pick the one you like best.

Casias answered 15/9, 2008 at 15:45 Comment(6)
@ErikvanBrakel just out of interest the current year in thailand is 2556. not sure if PHP locale takes this into account but in a perfect world it should :)Propaganda
You could just simply say: date("Y");Strangulation
Chinese and Japanese years ftw! 2016年 / 二千十六年Rhatany
If I could do this on Youtube. "Like if you are watching this in <?php echo date("Y"); ?>"Boult
Yes, there are MANY different ways to format a year, e.g. Thai years which is the Buddhist era (+543 from the West way of counting)Ardisardisj
also you can use now()->year ... it is pretty much the sameSulphanilamide
L
550
<?php echo date("Y"); ?>
Lithometeor answered 15/9, 2008 at 15:35 Comment(3)
short tags are not supported by all servers and there's also this: programmers.stackexchange.com/questions/151661/…Propaganda
In PHP 5.4, you can freely use short echo tags like the above. They're much nicer in views imho.Hohenlinden
@ShaneReustle, you missed the semicolons at the end ;) I know they are not important in this case, but it is a good practice for beginners :)Firstnighter
K
218

My super lazy version of showing a copyright line, that automatically stays updated:

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

This year (2008), it will say:

© 2008 Me, Inc.

Next year, it will say:

© 2008-2009 Me, Inc.

and forever stay updated with the current year.


Or (PHP 5.3.0+) a compact way to do it using an anonymous function so you don't have variables leaking out and don't repeat code/constants:

&copy; 
<?php call_user_func(function($y){$c=date('Y');echo $y.(($y!=$c)?'-'.$c:'');}, 2008); ?> 
Me, Inc.
Kittle answered 15/9, 2008 at 22:51 Comment(2)
Shorter (but less readable) version: &copy; <?php echo 2008 != date('Y') ? '2008 - ' . date('Y') : 2008; ?> Me, Inc.Collocutor
My one line version: <?php echo '&copy; 2008', ($year = gmdate("Y")) !== '2008'? ' - '.$year : '', ' Me, Inc.'; ?>Duodenum
P
84

With PHP heading in a more object-oriented direction, I'm surprised nobody here has referenced the built-in DateTime class:

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

or one-liner with class member access on instantiation (php>=5.4):

$year = (new DateTime)->format("Y");
Prolongate answered 2/1, 2013 at 18:3 Comment(0)
L
35

https://www.php.net/date

echo date('Y');
Limpet answered 15/9, 2008 at 15:36 Comment(0)
H
33
strftime("%Y");

I love strftime. It's a great function for grabbing/recombining chunks of dates/times.

Plus it respects locale settings which the date function doesn't do.

Hamsun answered 15/9, 2008 at 15:35 Comment(1)
just a note on strftime, deprecated as of 8.1.0Convergent
O
20

This one gives you the local time:

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

And this one UTC:

$year = gmdate('Y'); // 2008
Optical answered 15/9, 2008 at 15:44 Comment(0)
B
16

For 4 digit representation:

<?php echo date('Y'); ?>

2 digit representation:

<?php echo date('y'); ?>

Check the php documentation for more info: https://secure.php.net/manual/en/function.date.php

Bronder answered 16/10, 2014 at 8:2 Comment(0)
P
15

Here's what I do:

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

below is a bit of explanation of what it does:

d = day
m = month
Y = year

Y will gives you four digit (e.g. 1990) and y for two digit (e.g. 90)

Parting answered 17/1, 2014 at 15:52 Comment(1)
The question does not ask for d or m. The advice to use Y has been provided on this page years earlier. This answer adds no new, relevant value to this page.Bibliographer
B
11
print date('Y');

For more information, check date() function documentation: https://secure.php.net/manual/en/function.date.php

Broomstick answered 15/9, 2008 at 15:37 Comment(0)
A
7

For up to php 5.4+

<?php
    $current= new \DateTime();
    $future = new \DateTime('+ 1 years');

    echo $current->format('Y'); 
    //For 4 digit ('Y') for 2 digit ('y')
?>

Or you can use it with one line

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

If you wanna increase or decrease the year another method; add modify line like below.

<?PHP 
  $now   = new DateTime;
  $now->modify('-1 years'); //or +1 or +5 years 
  echo $now->format('Y');
  //and here again For 4 digit ('Y') for 2 digit ('y')
?>
Aggappora answered 25/12, 2016 at 0:57 Comment(0)
L
6

My way to show the copyright, That keeps on updating automatically

<p class="text-muted credit">Copyright &copy;
    <?php
        $copyYear = 2017; // Set your website start date
        $curYear = date('Y'); // Keeps the second year updated
        echo $copyYear . (($copyYear != $curYear) ? '-' . $curYear : '');
    ?> 
</p>    

It will output the results as

copyright @ 2017   //if $copyYear is 2017 
copyright @ 2017-201x    //if $copyYear is not equal to Current Year.
Lilililia answered 10/11, 2017 at 5:55 Comment(2)
This late answer does not reveal any new insights about how to access the current year. date('Y') was advised nearly a decade earlier.Bibliographer
that's exact duplicate of another answerAlboran
C
5

If your server supports Short Tags, or you use PHP 5.4, you can use:

<?=date("Y")?>
Coelostat answered 30/8, 2012 at 16:32 Comment(2)
Please, don't ever, ever, ever use short-tags again. #201140Lander
php v5.4.0 - the tag <?= is always available regardless of the short_open_tag ini setting.So now you can use this syntax.Pejsach
G
5

Using Carbon

$date = Carbon::now()->format('Y');
return $date;

In PHP

echo date("Y");
Grimsley answered 16/6, 2021 at 9:50 Comment(0)
M
3
<?php date_default_timezone_set("Asia/Kolkata");?><?=date("Y");?>

You can use this in footer sections to get dynamic copyright year

Melanoid answered 9/9, 2017 at 5:51 Comment(0)
C
1
$year = date("Y", strtotime($yourDateVar));
Cureton answered 1/4, 2020 at 13:39 Comment(1)
This question is asking about how to generate the CURRENT date, not a custom date. This answer is incorrect/inappropriate.Bibliographer
L
-2
<?php
$current_year = date('Y');
echo $current_year ;
?>
Lancer answered 25/2 at 10:18 Comment(3)
see: https://mcmap.net/q/45614/-how-do-i-use-php-to-get-the-current-year (and other deleted answers)Vinegarroon
Is there an advantage to setting this to a variable before printing it?Marcello
Comments on Stackoverflow are not the place to ask (new) questions ...Vinegarroon
A
-3

If you are using the Carbon PHP API extension for DateTime, you can achieve it easy:

<?php echo Carbon::now()->year; ?>

Aggrade answered 11/6, 2019 at 22:40 Comment(1)
seems like Laravel.... however the php date method is very much sufficientUnionist

© 2022 - 2024 — McMap. All rights reserved.