PHP 5.4.33 Released

strftime

(PHP 4, PHP 5)

strftime Formatuje lokalną datę/czas zgodnie z lokalizacją

Opis

string strftime ( string $format [, int $znacznik_czasu ] )

Zwraca łańcuch znaków sformatowany zgodnie z podanym szablonem formatującym, przy użyciu podanego znacznika czasu lub aktualnego czasu, jeśli znacznik nie jest podany. Nazwy miesięcy, dni tygodnia, itp. respektują ustawienia lokalizacji przy użyciu funkcji setlocale().

Poniższe symbole są rozpoznawane w szablonie formatującym:

  • %a - skrótowa nazwa dnia tygodnia zgodnie z lokalizacją
  • %A - pełna nazwa dnia tygodnia zgodnie z lokalizacją
  • %b - skrótowa nazwa miesiąca zgodnie z lokalizacją
  • %B - pełna nazwa miesiąca zgodnie z lokalizacją
  • %c - preferowana reprezentacja daty i czasu zgodnie z lokalizacją
  • %C - numer wieku (rok podzielony przez 100 i skrócony do liczby całkowitej, przedział od 00 do 99)
  • %d - dzień miesiąca jako liczba dziesiętna (przedział od 01 do 31)
  • %D - to samo co %m/%d/%y
  • %e - dzień miesiąca jako liczba dziesiętna, przy czym pojedyncza cyfra poprzedzona jest spacją (przedział od " 1" do "31")
  • %g - tak jak %G, ale bez uwzględnienia wieku
  • %G - rok w zapisie czterocyfrowym, powiązany z numerem tygodnia wg ISO. Symbol ten ma ten sam format i wartość jak %Y, z tym wyjątkiem, że jeśli numer tygodnia wg ISO należy do poprzedniego lub następnego roku, to poprzedni lub następny rok jest zwracany przez ten symbol.
  • %h - tak jak %b
  • %H - godzina jako liczba dziesiętna w systemie 24-godzinnym (przedział od 00 do 23)
  • %I - godzina jako liczba dziesiętna w systemie 12-godzinnym (przedział od 01 do 12)
  • %j - dzień roku jako liczba dziesiętna (przedział od 001 do 366)
  • %m - miesiąc jako liczba dziesiętna (przedział od 01 do 12)
  • %M - minuty jako liczba dziesiętna
  • %n - znak nowej linii
  • %p - albo "am" lub "pm" zgodnie z podanym czasem, albo łańcuchy znaków odpowiadające lokalizacji
  • %r - czas w notacji a.m. lub p.m.
  • %R - czas w notacji 24-godzinnej
  • %S - sekundy jako liczba dziesiętna
  • %t - znak tabulacji
  • %T - aktualny czas, odpowiednik %H:%M:%S
  • %u - numer dnia tygodnia jako liczba dziesiętna [1,7], gdzie 1 oznacza poniedziałek
    Ostrzeżenie

    Sun Solaris podaje niedzielę jako 1, pomimo że ISO 9889:1999 (aktualny standard języka C) jasno określa, że powinien to być poniedziałek.

  • %U - numer tygodnia aktualnego roku jako liczba dziesiętna, począwszy od pierwszej niedzieli jako pierwszego dnia pierwszego tygodnia
  • %V - numer tygodnia aktualnego roku wg ISO 8601:1988 jako liczba dziesiętna, przedział od 01 do 53, gdzie tydzień 1 jest pierwszym tygodniem, którym ma co najmniej 4 dni w aktualnym roku, przy czym pierwszym dniem tygodnia jest poniedziałek. (Przy użyciu %G lub %g otrzymuje się rok, który odpowiada numerowi tygodnia dla podanego znacznika czasu).
  • %W - numer tygodnia aktualnego roku jako liczba dziesiętna, począwszy od pierwszego poniedziałku, jako pierwszego dnia pierwszego tygodnia
  • %w - dzień tygodnia jako liczba dziesiętna, począwszy od niedzieli - numer 0
  • %x - preferowana reprezentacja daty, zgodnie z lokalizacją, bez czasu
  • %X - preferowana reprezentacja czasu, zgodnie z lokalizacją, bez daty
  • %y - rok jako liczba dziesiętna, bez uwzględnienia wieku (przedział od 00 do 99)
  • %Y - rok jako liczba dziesiętna, z wiekiem włącznie
  • %Z - strefa czasowa, nazwa lub skrót
  • %% - znak "%"

Informacja:

Nie wszystkie symbole konwersji mogą być obsługiwane przez twoją bibliotekę C, co oznacza, że nie będą obsługiwane przez PHP-owską funkcję strftime(). Oznacza to, że np. %e, %T i %D (oraz być może inne) nie będą funkcjonować w Windows.

Przykład #1 przykład strftime()

setlocale (LC_TIME, "C");
print (strftime ("%A, to w fińskim "));
setlocale (LC_TIME, "fi_FI");
print (strftime ("%A, we francuskim "));
setlocale (LC_TIME, "fr_FR");
print (strftime ("%A, a w niemieckim "));
setlocale (LC_TIME, "de_DE");
print (strftime ("%A.\n"));
Powyższy przykład działa, jeśli masz zainstalowane w swoim systemie odpowiednie lokale.

Patrz także setlocale() i mktime() oraz »  Otwarta Specyfikacja Grupowa strftime().

add a note add a note

User Contributed Notes 30 notes

up
4
eric dot brison at anakeen dot com
6 months ago
strftime not format microsecond (decimal part of seconds).
This function add '%f' key in format to render microsecond (6 digits) also.

<?php
/**
* @param string $format strftime format
* @param float $microtime time with microsecond
* @return string
*/
function strftimeu($format, $microtime)
{
    if (
preg_match('/^[0-9]*\\.([0-9]+)$/', $microtime, $reg)) {
       
$decimal = substr(str_pad($reg[1], 6, "0"), 0, 6);
    } else {
       
$decimal = "000000";
    }
   
$format = preg_replace('/(%f)/', $decimal, $format);
    return
strftime($format, $microtime);
}
?>

Example :
<?php
$now
=microtime(true);
printf("REF:%s\n",$now );
printf("FMT:%s\n", strftimeu('%H:%M:%S.%f', $now));
?>

Results are :
REF:1393937303.6615
FMT:13:48:23.661500
FMT:13h 48min 23s 661500µs

Note : Here the decimal part of microtime is on 4 digits due to default precision
up
5
Bondas Timotei
3 years ago
If strange characters are returned use utf8_encode(strftime()) for UTF-8 characters
up
2
ciprianmp at yahoo dot com
3 years ago
This worked for me to distinguish between windows and linux, for stripping leading zeros from days/months in the short formats (like for Czech):
stristr(PHP_OS,"win") ? "%#d.%#m.%Y" : "%-d.%-m.%Y"
up
2
lamb dot dan at gmail dot com
5 years ago
<?php
/*
*    This function figures out what fiscal year a specified date is in.
*    $inputDate - the date you wish to find the fiscal year for. (12/4/08)
*    $fyStartDate - the month and day your fiscal year starts. (7/1)
*    $fyEndDate - the month and day your fiscal year ends. (6/30)
*    $fy - returns the correct fiscal year
*/
function calculateFiscalYearForDate($inputDate, $fyStart, $fyEnd){
   
$date = strtotime($inputDate);
   
$inputyear = strftime('%Y',$date);
       
   
$fystartdate = strtotime($fyStart.$inputyear);
   
$fyenddate = strtotime($fyEnd.$inputyear);

    if(
$date < $fyenddate){
       
$fy = intval($inputyear);
    }else{
       
$fy = intval(intval($inputyear) + 1);
    }
   
    return
$fy;
   
}

// my fiscal year starts on July,1 and ends on June 30, so...
echo calculateFiscalYearForDate("5/15/08","7/1","6/30");
// returns 2008

echo calculateFiscalYearForDate("12/1/08","7/1","6/30");
// returns 2009
?>
up
2
denis at spiralsolutions dot com
7 years ago
(in addition to Andy's post)
To get a RFC 2822 date (used in RSS) of the current local time :

echo strftime ("%a, %d %b %Y %H:%M:%S %z") ;

Note: option %z / %Z - work different on Windows platform, for example
output of this code line can be:
Thu, 02 Nov 2006 09:54:59 Jerusalem Standard Time (on Windows)
Thu, 02 Nov 2006 09:54:59 +0200                   (on Linux)

[red. It is much smarter to use date(DATE_RSS); here]
up
2
Jon Keating
8 years ago
Under windows if you are using Japanese version, you must use the following code:

setlocale(LC_ALL, "Japanese_Japan.20932") for EUC
setlocale(LC_ALL, "Japanese_Japan.932") for SJIS

I found the following page that helped me with this issue:
http://moodle.org/mod/forum/discuss.php?d=8329
up
3
szilagyigabor at yahoo dot com
4 years ago
This is that worked with UTF-8 encoding on Linux server, with right accents:
<?php
setlocale
(LC_ALL, 'hu_HU.UTF8');
echo(
strftime('%Y. %B %d. %A'));
?>

Output is:
2009. november 02. hétfő

Also, this one can be used, if not utf-8 preferred:
<?php
setlocale
(LC_ALL, 'hu_HU.ISO8859-2');
?>

UTF-8 is not supported on windows platforms, so there the iconv workaround must be used:
<?php
setlocale
(LC_ALL, 'hun_hun');
echo(
iconv('ISO-8859-2', 'UTF-8',strftime('%Y. %B %d. %A')));
?>

The output is the same as before. Note that, the iconv first parameter is ISO-8859-2 not ISO-8859-1, because the locale is hungarian which uses 8859-2 codepage as default. It is needed for the right accents.

If you want use the same code for Windows and Linux platforms, the second one is the right option (the iconv trick), but the locale configuration must be different (Linux: hu_HU, windows: hun_hun), but in that case the UTF8 tag is not needed for the Linux config.
up
1
Uwe at Familie-Loyal dot de
1 year ago
more fixed Problems while uing strftime in win32-systems.

        function strftime_win32($format, $ts = null) {
                if (!$ts) $ts = time();
       
                $mapping = array(
                                '%C' => sprintf("%02d", date("Y", $ts) / 100),
                                '%D' => '%m/%d/%y',
                                '%e' => sprintf("%' 2d", date("j", $ts)),
                                '%h' => '%b',
                                '%n' => "\n",
                                '%r' => date("h:i:s", $ts) . " %p",
                                '%R' => date("H:i", $ts),
                                '%t' => "\t",
                                '%T' => '%H:%M:%S',
                                '%u' => ($w = date("w", $ts)) ? $w : 7
                );
                $format = str_replace(
                                array_keys($mapping),
                                array_values($mapping),
                                $format
                );
               
                if($format=='%V' or $format=='%G' or $format=='%g'){
                        // When strftime("%V") fails, some unoptimized workaround
                        //
                        // http://en.wikipedia.org/wiki/ISO_8601 : week 1 is "the week with the year's first Thursday in it (the formal ISO definition)"

                       
                        $year = strftime("%Y", $ts);
                        $isoyear=$year;
                       
                        $first_day = strftime("%w", mktime(0, 0, 0, 1, 1, $year));
                        $last_day = strftime("%w", mktime(0, 0, 0, 12, 31, $year));
                       
                        $number = $isonumber = strftime("%W", $ts);
                       
                        // According to strftime("%W"), 1st of january is in week 1 if and only if it is a monday
                        if ($first_day == 1) {
                                $isonumber--;
                        }
                       
                        // 1st of january is between monday and thursday; starting (now) at 0 when it should be 1
                        if ($first_day >= 1 && $first_day <= 4){
                                $isonumber++;
                                $isoyear=$year;
                        }elseif ($number == 0){
                                $isonumber = mktime(0, 0, 0, 12, 31, $year - 1);
                                $isoyear=$year;
                        }
                        if ($isonumber == 53 && ($last_day == 1 || $last_day == 2 || $last_day == 3)){
                                $isonumber = 1;
                                $isoyear=$year+1;
                        }
                        if ($format=='%V') {
                                return sprintf("%02d", $isonumber);
                        }elseif ($format=='%G'){
                                return sprintf("%04d", $isoyear);
                        }elseif ($format=='%g'){
                                return substr(sprintf("%04d", $isoyear),-2);
                        }
                       
                               
                }else{
                        return strftime($format, $ts);
                }
        }
up
1
dgudgeon at example dot com
3 years ago
If moving from date() to strftime() to support additional languages, you may miss the ordinal suffix format option date('S'). Workaround this by adding an extra modifier (%O).

<?php
function my_strftime ($format, $timestamp)
{
   
$format = str_replace('%O', date('S', $timestamp), $format);   
    return
strftime($format, $timestamp);
}
?>
up
0
denis at ibresource dot ru
24 days ago
%p and %P replaced to '' in ru and other locales so 20:10 in %I:%M %p will be 08:10 in russian (without pm)
up
0
alexbrtn@gmail dot com
7 months ago
{--}, it is replaced on "today" or "yesterday"
up
0
Chris
3 years ago
Sometimes, you want Jan 1 to be week 1 and weeks to begin on Sunday. Here's a way to use strftime U format character to follow this convention:
<?php
$month
= 5; $year = 2012; echo "Week #'s in May 2012: ";
$week_num_correction = strftime('%U', mktime(0,0,0,1,1,$year)) === '00' ? 1 : 0;
$week_numbers = range(strftime('%U', mktime(0,0,0,$month,1,$year)) + $week_num_correction, strftime('%U', mktime(0,0,0,$month+1,0,$year)) + $week_num_correction);
foreach(
$week_numbers as $week_number) echo "$week_number ";
?>
displays: Week #'s in May 2012: 18 19 20 21 22
up
0
fmaz008 at gmail dot com
3 years ago
The example of the workarround for the %e modifier is a bit complex. Sometime you might want to prefer a simple ltrim():

<?php
ltrim
(strftime('%d', $time), '0');
?>
up
0
Anonymous
3 years ago
%V may fail with some systems (Windows XP, at least). Here is a function that should work to get the week number of a day (timestamped), according to ISO 8601.

"should work" as in "it is working with my understanding of this norm", where 1st of january can be week 52, 53 or 01. Hopefully.

testing (php_uname("s") == "Windows NT") or equivalent can be an option (when switching between Wampserver and a GNU server, for instance).

Please, erase and correct my message if there is any error.

<?php
function week_isonumber ($time) {
// When strftime("%V") fails, some unoptimized workaround
//
// http://en.wikipedia.org/wiki/ISO_8601 : week 1 is "the week with the year's first Thursday in it (the formal ISO definition)"

   
$year = strftime("%Y", $time);

   
$first_day = strftime("%w", mktime(0, 0, 0, 1, 1, $year));
   
$last_day = strftime("%w", mktime(0, 0, 0, 12, 31, $year));
       
   
$number = $isonumber = strftime("%W", $time);

   
// According to strftime("%W"), 1st of january is in week 1 if and only if it is a monday
   
if ($first_day == 1)
       
$isonumber--;

   
// 1st of january is between monday and thursday; starting (now) at 0 when it should be 1
   
if ($first_day >= 1 && $first_day <= 4)
       
$isonumber++;
    else if (
$number == 0)
       
$isonumber = week_isonumber(mktime(0, 0, 0, 12, 31, $year - 1));

    if (
$isonumber == 53 && ($last_day == 1 || $last_day == 2 || $last_day == 3))
       
$isonumber = 1;

    return
sprintf("%02d", $isonumber);
}
?>
up
0
Lemmi
4 years ago
Why not use utf8_encode to fix problems with letters in ISO-8859-1 and charset set to UTF-8?

For example:
<?php

setlocale
(LC_TIME, "de_DE");
echo
utf8_encode(strftime('%B')); // Output e.g.: März

?>
up
0
baptiste dot place at utopiaweb dot fr
4 years ago
Created this small method to convert a date format to a strftime format. One format is enough to learn :)

<?php
/**
* Convert a date format to a strftime format
*
* Timezone conversion is done for unix. Windows users must exchange %z and %Z.
*
* Unsupported date formats : S, n, t, L, B, G, u, e, I, P, Z, c, r
* Unsupported strftime formats : %U, %W, %C, %g, %r, %R, %T, %X, %c, %D, %F, %x
*
* @param string $dateFormat a date format
* @return string
*/
public static function dateFormatToStrftime($dateFormat) {
   
   
$caracs = array(
       
// Day - no strf eq : S
       
'd' => '%d', 'D' => '%a', 'j' => '%e', 'l' => '%A', 'N' => '%u', 'w' => '%w', 'z' => '%j',
       
// Week - no date eq : %U, %W
       
'W' => '%V'
       
// Month - no strf eq : n, t
       
'F' => '%B', 'm' => '%m', 'M' => '%b',
       
// Year - no strf eq : L; no date eq : %C, %g
       
'o' => '%G', 'Y' => '%Y', 'y' => '%y',
       
// Time - no strf eq : B, G, u; no date eq : %r, %R, %T, %X
       
'a' => '%P', 'A' => '%p', 'g' => '%l', 'h' => '%I', 'H' => '%H', 'i' => '%M', 's' => '%S',
       
// Timezone - no strf eq : e, I, P, Z
       
'O' => '%z', 'T' => '%Z',
       
// Full Date / Time - no strf eq : c, r; no date eq : %c, %D, %F, %x 
       
'U' => '%s'
   
);
   
    return
strtr((string)$dateFormat, $caracs);
}
?>

I use it with this condition on a date format :
if(preg_match("/(D|l|F|M)/", $format))
up
0
Chad
4 years ago
On the Linux server I'm using, strftime() also accepts a "-" option to request no padding:

<?php
$ts
= strtotime("4 Nov 2009");
echo
strlen(strftime("%-e", $ts)), "\n"; // "1" (no padding)
echo strlen(strftime("%e", $ts)), "\n"; // "2" (space padded)
?>
up
0
dapikk[at]gmail[dot]com
5 years ago
I had a need to subtrackt an older time from current time to get the time between.
Example: If one has worked from 2009-03-16 11:33:54 to 2009-03-16 12:01:54 then he has worked X hours,minutes and seconds. I tried to find that X. And so - one solution would be:
<?php
$start_date
= strtotime("2009-03-16 11:33:54"); //start date from database - date("Y-m-d H:i:s") made as UNIX timestamp
$end_date = strtotime("2009-03-16 12:01:54"); //end date from database - date("Y-m-d H:i:s") made as UNIX timestamp
$ajavahe = $end_date - $start_date;
$time_between = gmstrftime('%Hh %Mm %Ss', $ajavahe); //gmstrftime() deals with different timezones correctly. (If in example you would be situated in Estonia and you would use strftime() you get wrong answer off by 2 hrs, because timezone is GMT+2 - with gmstrftime() comes right answer.)

echo 'You have worked: '.$time_between;
?>
Hope that this one makes someones life easier :D
up
0
khaled dot ataia at gmail dot com
5 years ago
for Arabic

<?php
setlocale
(LC_ALL,'ar');
echo
strftime('%A %d %B %Y');
?>
up
0
eljaunis at gmail dot com
5 years ago
This is what worked in my case:

<?php
    setlocale
(LC_ALL, 'es_ES').': ';
    echo
iconv('ISO-8859-1', 'UTF-8', strftime('%A %d de %B de %Y', time()));
   
?>

it displays: miércoles 22 de octubre de 2008
up
0
buana95 at yahoo dot com
6 years ago
For windows user:

If you unsuccessfully change date/time format to your locale country using xx_XX format, try using XXX format or ISO-639 country codes format.

See complete list for ISO-639 here: http://www.w3.org/WAI/ER/IG/ert/iso639.htm

For example:

<?php
setlocale
(LC_ALL, 'IND');
echo
strftime("Today in Indonesia is %A");
?>
up
0
nielsvan den berge at hotmail dot com
7 years ago
A small function to get the first weekday of the month.
For example the first monday of the month, or the first friday, etc.

<?php 
 
/**
   *
   *  Gets the first weekday of that month and year
   *
   *  @param  int   The day of the week (0 = sunday, 1 = monday ... , 6 = saturday)
   *  @param  int   The month (if false use the current month)
   *  @param  int   The year (if false use the current year)
   *
   *  @return int   The timestamp of the first day of that month
   *
   **/ 
 
function get_first_day($day_number=1, $month=false, $year=false)
  {
   
$month  = ($month === false) ? strftime("%m"): $month;
   
$year   = ($year === false) ? strftime("%Y"): $year;
   
   
$first_day = 1 + ((7+$day_number - strftime("%w", mktime(0,0,0,$month, 1, $year)))%7);
 
    return
mktime(0,0,0,$month, $first_day, $year);
  }

// this will output the first wednesday of january 2007 (wed 03-01-2007)
echo strftime("%a %d-%m-%Y", get_first_day(3, 1, 2007));
?>
up
0
ma
7 years ago
note, that for some languages you MUST set LC_ALL instead of LC_TIME.

note that you further have to explicitly define your output-encoding (default is ISO-8859-1 [which makes problems for some languages])!

at least i expirienced this behaviour on a german WinXP-PHP4 environment:

<?php

// does not work - gives question marks:
setlocale(LC_TIME, 'RUS'); // ISO Alpha-3 is supported by xp
echo strftime('%A', time());

?>

<?php

// DOES work:
header('Content-Type: text/html; charset=UTF-8'); // you could also use another charset here if iconv isn't installed on your system.

echo setlocale(LC_ALL, 'RUS').': ';
echo
iconv('windows-1251', 'UTF-8', strftime('%A', time()))."\n";

?>
up
0
th1nk3r at gmail dot DELETETHIS dot com
7 years ago
Function strftime() use the locales installed in your system (linux).

If you are like me and only leave in the system the locales you use normally (en_US and your own language locale, like es_ES), you'll only be able to use the locales installed. If your application is translated to other languages, you need these locales too.

The name of the locale in your system is important too. This can be a problem when you want to distribute the app.

If you have this locales in your system:
en_US/ISO-8859-1
en_US.UTF-8/UTF-8
es_ES/ISO-8859-1
es_ES@euro/ISO-8859-15
es_ES.UTF-8/UTF-8
es_ES@euro/UTF-8

and use setlocale('es_ES'), the result will use the iso-8859-1 charset even if you have all your system, files and configuration options in UTF-8. To receive content in UTF-8, in this example, you need to use setlocale('es_ES.UTF-8') or setlocale('es_ES.UTF-8@UTF-8').

The definition of locales can change from one system to another, and so the charset from the results.
up
0
jw at jwscripts dot com
9 years ago
The following function implements the conversion specifiers which are not supported on Win32 platforms:

(Note: the specifiers %V, %G and %g can be implemented using other functions described in this section)

<?php

function strftime_win32($format, $ts = null) {
    if (!
$ts) $ts = time();

   
$mapping = array(
       
'%C' => sprintf("%02d", date("Y", $ts) / 100),
       
'%D' => '%m/%d/%y',
       
'%e' => sprintf("%' 2d", date("j", $ts)),
       
'%h' => '%b',
       
'%n' => "\n",
       
'%r' => date("h:i:s", $ts) . " %p",
       
'%R' => date("H:i", $ts),
       
'%t' => "\t",
       
'%T' => '%H:%M:%S',
       
'%u' => ($w = date("w", $ts)) ? $w : 7
   
);
   
$format = str_replace(
       
array_keys($mapping),
       
array_values($mapping),
       
$format
   
);

    return
strftime($format, $ts);
}

?>
up
0
neo at gothic-chat d0t de
10 years ago
To get a RFC 850 date (used in HTTP) of the current time:

gmstrftime ("%A %d-%b-%y %T %Z", time ());

This will get for example:
Friday 25-Jun-04 03:30:23 GMT

Please note that times in HTTP-headers _must_ be GMT, so use gmstrftime() instead of strftime().
up
-1
Josue R.
6 years ago
Here's a simple version for date formating i use between displaying in HTML and converting back to MYSQL format:

<?php
function format_date($original='', $format="%m/%d/%Y") {
   
$format = ($format=='date' ? "%m-%d-%Y" : $format);
   
$format = ($format=='datetime' ? "%m-%d-%Y %H:%M:%S" : $format);
   
$format = ($format=='mysql-date' ? "%Y-%m-%d" : $format);
   
$format = ($format=='mysql-datetime' ? "%Y-%m-%d %H:%M:%S" : $format);
    return (!empty(
$original) ? strftime($format, strtotime($original)) : "" );
}
?>

example (in HTML or webapp):
[grab from database]...
$dbase_stored_date = "2007-03-15";
$display_html_date = format_date($dbase_stored_date);
... displays as "03/15/2007"

example (saving form via on POST/GET):
$update_date = format_date($_POST['display_html_date'], 'mysql-date');
// converts back to '2007-03-15'
.... [your mysql update here]

Don't forget to sanitize your POST/GET's   =)
up
-1
jerome dot place at free dot fr
6 years ago
Here is a function to convert dates before 1970, very useful if you are still using php 4 (it is supported in php5) :

<?php
# convert a date to special format
# $date is like 2000-01-01 00:00:00
# $format : refer to strftime function
function convert_date($date,$format) {   
    if(
$date=='0000-00-00 00:00:00' OR $date=='0000-00-00' OR $date=='' OR $date==NULL) {
        return
'';
    }
    else {
       
$year=substr($date,0,4);
        if(
phpversion() < 5.0 AND $year < 1970) {
           
           
$new_date=substr_replace($date,'1980',0,4); # we replace the year by a year after 1970       
           
$new_format=eregi_replace('%a|%A|%u','',$format); # we remove days information from the format because they would be wrong
           
$new_date=strftime($new_format,strtotime($new_date)); # we convert the date
           
$new_date=eregi_replace('1980',$year,$new_date); # we put back the real year
           
return $new_date;
        }
        else {
            return
strftime($format,strtotime($date));
        }
    }
}
?>
up
-2
Michael Z.
5 years ago
This is so simple it has to be found in one of all the comments on all those different time functions. But since I didn't find it, here it is: Use this to convert between different time formats:

<?PHP
if (!function_exists('convertTime')) {
 
/** Converts time strings from one format into another using
   *  PHP formats.
   *
   *  @param String $dformat Format to convert to
   *  @param String $sformat Format to convert from, e.g. format
   *      of $ts
   *  @param String $ts Time string to be converted
   *  @return String Supplied time translated to the format specified
   *    in $dformat
   */
 
function convertTime($dformat,$sformat,$ts) {
   
extract(strptime($ts,$sformat));
    return
strftime($dformat,mktime(
                                 
intval($tm_hour),
                                 
intval($tm_min),
                                 
intval($tm_sec),
                                 
intval($tm_mon)+1,
                                 
intval($tm_mday),
                                 
intval($tm_year)+1900
                               
));
  }
}

/*
* And for the test....
*/
echo convertTime('%Y-%m-%d','%d.%m.%Y','27.11.2009');
?>

This should print "2009-27-11".

I did not put much effort in this code. The task also seems "too simple to be neccessary". But as I said, I didn't find anything to help me with this.

Cheers,

Michael Z
up
-2
jjarsater at gmail dot com
5 years ago
<?php
// Date string
$timestamp     =     strftime("%Y-%m-%d %H:%M:%S %Y");

// From this string ($timestamp) can we print
echo strftime("%a %d %b %H:%M:%S %Y", strtotime($timestamp))."<br/>";
echo
strftime("%a %d %b %H:%M", strtotime($timestamp))."<br/>";
echo
strftime("%Y-%m-%d %H:%M:%S", strtotime($timestamp))."<br/>";
echo
strftime("%Y-%m-%d %H:%M", strtotime($timestamp))."<br/>";
echo
strftime("%Y-%m-%d", strtotime($timestamp))."<br/>";
echo
strftime("%a %d %b %Y", strtotime($timestamp))."<br/>";

/*And it will output

Wed 20 May 15:53:40 2009
Wed 20 May 15:53
2009-05-20 15:53:40
2009-05-20 15:53
2009-05-20
Wed 20 May 2009

*/
?>
To Top