1146

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

9
  • 2
    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).
    – justin
    Commented Jan 26, 2014 at 0:39
  • 5
    @justin 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" ). Commented Feb 7, 2014 at 17:44
  • 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.
    – justin
    Commented Feb 8, 2014 at 11:01
  • 9
    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. Commented Mar 8, 2014 at 17:43
  • 8
    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'. Commented Jun 17, 2015 at 9:04

18 Answers 18

1439
Answer recommended by PHP Collective

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.

6
  • 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 :) Commented Feb 6, 2013 at 12:41
  • 1
    You could just simply say: date("Y");
    – user352353
    Commented Dec 12, 2013 at 22:58
  • Chinese and Japanese years ftw! 2016年 / 二千十六年 Commented Apr 6, 2016 at 14:39
  • 4
    If I could do this on Youtube. "Like if you are watching this in <?php echo date("Y"); ?>"
    – Luka
    Commented Jan 2, 2017 at 19:42
  • 2
    also you can use now()->year ... it is pretty much the same Commented Jan 6, 2021 at 16:22
550
<?php echo date("Y"); ?>
3
  • 35
    short tags are not supported by all servers and there's also this: programmers.stackexchange.com/questions/151661/… Commented Feb 6, 2013 at 12:44
  • 5
    In PHP 5.4, you can freely use short echo tags like the above. They're much nicer in views imho.
    – Jimbo
    Commented Jul 22, 2013 at 8:50
  • 1
    @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 :)
    – Dimitar
    Commented Apr 26, 2018 at 8:07
219

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.
2
  • 18
    Shorter (but less readable) version: &copy; <?php echo 2008 != date('Y') ? '2008 - ' . date('Y') : 2008; ?> Me, Inc. Commented Mar 2, 2014 at 14:06
  • 1
    My one line version: <?php echo '&copy; 2008', ($year = gmdate("Y")) !== '2008'? ' - '.$year : '', ' Me, Inc.'; ?>
    – ale5000
    Commented Jul 3, 2017 at 14:42
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");
0
35

https://www.php.net/date

echo date('Y');
0
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.

1
  • 2
    just a note on strftime, deprecated as of 8.1.0 Commented Oct 12, 2022 at 23:17
20

This one gives you the local time:

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

And this one UTC:

$year = gmdate('Y'); // 2008
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

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)

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. Commented May 21, 2023 at 21:54
11
print date('Y');

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

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')
?>
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.
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. Commented May 21, 2023 at 21:52
  • that's exact duplicate of another answer Commented Jun 28, 2023 at 8:36
5

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

<?=date("Y")?>
2
  • 7
    Please, don't ever, ever, ever use short-tags again. stackoverflow.com/questions/200640/…
    – Jelmer
    Commented Dec 25, 2012 at 10:25
  • php v5.4.0 - the tag <?= is always available regardless of the short_open_tag ini setting.So now you can use this syntax.
    – nektobit
    Commented Apr 13, 2019 at 8:23
5

Using Carbon

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

In PHP

echo date("Y");
3
<?php date_default_timezone_set("Asia/Kolkata");?><?=date("Y");?>

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

0
$year = date("Y", strtotime($yourDateVar));
1
  • This question is asking about how to generate the CURRENT date, not a custom date. This answer is incorrect/inappropriate. Commented May 21, 2023 at 22:08
-1
<?php
$current_year = date('Y');
echo $current_year ;
?>
2
  • Is there an advantage to setting this to a variable before printing it? Commented Feb 27 at 13:52
  • Did the job for me. Is there anything wrong with it? Commented 23 hours ago
-4

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

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

1
  • 1
    seems like Laravel.... however the php date method is very much sufficient Commented Oct 23, 2020 at 11:03

Not the answer you're looking for? Browse other questions tagged or ask your own question.