there is a strftime compatibility package for php>=8.1 at https://github.com/alphp/strftimestrftime
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
strftime
Референца за `function.strftime.php` со подобрена типографија и навигација.
strftime
(PHP 4, PHP 5, PHP 7, PHP 8)
strftime — Форматирај локално време/датум според поставките на локалот
Оваа функција е DEPRECATED Парсирај време/датум генериран со
Алтернативи на оваа функција вклучуваат:
= NULL
strftime(string
$format, ?int $timestamp = null): string|falseФорматирај го времето и/или датумот според поставките на локалот. Имињата на месеците и деновите во неделата и други јазично зависни низи ги почитуваат тековните локални поставки поставени со setlocale().
. Не сите спецификатори за конверзија може да бидат поддржани од вашата C библиотека, во кој случај тие нема да бидат поддржани од PHP. strftime(). Дополнително, не сите платформи поддржуваат негативни временски ознаки, така што вашиот опсег на датуми може да биде ограничен на не порано од Unix епохата. Ова значи дека %e, %T, %R и %D (и можно други) - како и датумите пред
Jan 1, 1970 , нема да работат на Windows, некои Linux дистрибуции и неколку други оперативни системи. За Windows системи, целосен преглед на поддржаните спецификатори за конверзија може да се најде на
» MSDN. Наместо тоа користете
Форматирај го времето/датумот GMT/UTC според локалните поставки method.
Параметри
format-
Следниве знаци се препознаваат во formatнизата за параметриformat= NULL Пример вратени вредности Ден --- --- %aСкратена текстуална репрезентација на денот SunthroughSat%AЦелосна текстуална репрезентација на денот SundaythroughSaturday%dДвоцифрен ден од месецот (со водечки нули) 01to31%eДен од месецот, со празно место пред едноцифрените броеви. Не е имплементирано како што е опишано на Windows. Погледнете подолу за повеќе информации. 1to31%jДен од годината, 3 цифри со водечки нули 001to366%uISO-8601 нумеричка репрезентација на денот во неделата 1(за Понеделник) до7(за Недела)%wНумеричка репрезентација на денот во неделата 0Нумеричка претстава на денот во неделата6(за Недела) до(за Сабота) --- --- %UНедела 13Број на неделата во дадената година, почнувајќи со првата Недела како прва недела%V(за 13-тата целосна недела од годината) 01through53ISO-8601:1988 Број на неделата во дадената година, почнувајќи со првата недела од годината со најмалку 4 работни дена, со Понеделник како почеток на неделата%W(каде 53 претставува преклопувачка недела) 46Нумеричка претстава на неделата од годината, почнувајќи со првиот Понеделник како прва недела(за 46-тата недела од годината што започнува со Понеделник) --- --- %bМесец JanthroughDec%BСкратено име на месецот, врз основа на локалот JanuarythroughDecember%hЦелосно име на месецот, врз основа на локалот JanthroughDec%mСкратено име на месецот, врз основа на локалот ( нондирање на %b) 01Двоцифрена претстава на месецот12(за Јануари) до(за Декември) --- --- %CГодина 19Двоцифрена претстава на векот (годината поделена со 100, исечена до цел број)%gДвоцифрен приказ на годината според стандардите ISO-8601:1988 (види %V) Пример: 09за неделата од 6 јануари 2009 година%GЦелосната четирицифрена верзија на %g Пример: 2008за неделата од 3 јануари 2009 година%yДвоцифрен приказ на годината Пример: 09за 2009 година,79за 1979 година%YЧетирицифрен приказ на годината Пример: 2038Време --- --- %HДвоцифрен приказ на часот во 24-часовен формат 00through23%kЧас во 24-часовен формат, со празно место пред едноцифрените часови 0through23%IДвоцифрен приказ на часот во 12-часовен формат 01through12%l (lower-case 'L')Час во 12-часовен формат, со празно место пред едноцифрените часови 1through12%MДвоцифрен приказ на минутите 00through59%pГОЛЕМИ 'AM' или 'PM' врз основа на даденото време Пример: AMза 00:31,PMза 22:23. Точниот резултат зависи од Оперативниот Систем, и тие исто така можат да вратат варијанти со мали букви, или варијанти со точки (како што сеa.m.).%Pмали 'am' или 'pm' врз основа на даденото време Пример: amза 00:31,pmза 22:23. Не е поддржано од сите Оперативни Системи.%rИсто како "%I:%M:%S %p" Пример: 09:34:17 PMза 21:34:17%RИсто како "%H:%M" Пример: 00:35за 12:35 AM,16:44за 4:44 PM%SДвоцифрен приказ на секундата 00through59%TИсто како "%H:%M:%S" Пример: 21:34:17за 09:34:17 PM%XПретпочитан приказ на времето според локалот, без датум Пример: 03:59:16or15:59:16%zПоместување на временската зона. Не е имплементирано како што е опишано на Windows. Погледнете подолу за повеќе информации. Пример: -0500за американско источно време%ZКратенка за временската зона. Не е имплементирано како што е опишано на Windows. Погледнете подолу за повеќе информации. Пример: ESTза источно времеВременски и Датумски Печати --- --- %cПретпочитан временски и датумски печат според локалот Пример: Tue Feb 5 00:45:10 2009за 5 февруари 2009 во 12:45:10 AM%DИсто како "%m/%d/%y" Пример: 02/05/09за 5 февруари 2009%FИсто како "%Y-%m-%d" (често се користи во бази на податоци) Пример: 2009-02-05за 5 февруари 2009%sUnix Epoch Временски печат (исто како time() функција) Пример: 305815200за 10 септември 1979 година 08:40:00 часот наутро%xПретпочитан формат на датум врз основа на локалот, без времето Пример: 02/05/09за 5 февруари 2009Разно --- --- %nНов ред ("\n") --- %tТаб карактер ("\t") --- %%Буквален знак за процент ("%") --- Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваСпротивно на ISO-9899:1999, Sun Solaris започнува со недела како 1. Како резултат,
%uможеби нема да функционира како што е опишано во овој прирачник.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваСамо за Windows:
На
%eмодификаторот не е поддржан во имплементацијата на Windows на оваа функција. За да ја постигнете оваа вредност,%#dмодификаторот може да се користи наместо тоа. Примерот подолу илустрира како да се напише компатибилна функција за повеќе платформи.На
%zand%Zмодификаторите враќаат име на временска зона наместо поместување или кратенка.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваСамо за macOS и musl: На
%Pмодификаторот не е поддржан во имплементацијата на macOS на оваа функција. timestampОпционалниот
timestampпараметарот е int Unix временски печат што стандардно се поставува на моменталното локално време акоtimestampе изоставен илиnull. Со други зборови, стандардно се поставува на вредноста на time().
Вратени вредности
Враќа форматиран стринг format
користејќи го дадениот timestamp или моменталното локално време ако не е даден временски печат. Имињата на месеците и деновите во неделата и другите јазично-зависни низи го почитуваат моменталниот локал поставен со setlocale(). Функцијата враќа false if format е празна, содржи неподдржани спецификатори за конверзија, или ако должината на вратената низа би била поголема од
4095.
Errors/Exceptions
Секој повик до функција за датум/време ќе генерира E_WARNING
ако временската зона не е валидна. Погледнете исто така date_default_timezone_set()
пораки и враќа E_WARNING . На други оперативни системи можеби нема да добиете никакви falseпораки и излезот може да ги содржи спецификаторите за конверзија несоодветно. На Windows, обезбедувањето непознати спецификатори за конверзија ќе резултира со 5
E_WARNING Овој пример ќе работи ако имате инсталирани соодветните локали на вашиот систем.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
timestamp сега е null.
|
Примери
примери за локали
Пример #1 strftime() Пример #2 Пример за број на недела ISO 8601:1988
<?php
setlocale(LC_TIME, "C");
echo strftime("%A");
setlocale(LC_TIME, "fi_FI");
echo strftime(" in Finnish is %A,");
setlocale(LC_TIME, "fr_FR");
echo strftime(" in French %A and");
setlocale(LC_TIME, "de_DE");
echo strftime(" in German %A.\n");
Пример #3 Пример компатибилен со повеќе платформи користејќи го
<?php
/* December 2002 / January 2003
ISOWk M Tu W Thu F Sa Su
----- ----------------------------
51 16 17 18 19 20 21 22
52 23 24 25 26 27 28 29
1 30 31 1 2 3 4 5
2 6 7 8 9 10 11 12
3 13 14 15 16 17 18 19 */
// Outputs: 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/28/2002")) . "\n";
// Outputs: 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/30/2002")) . "\n";
// Outputs: 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";
// Outputs: 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";
/* December 2004 / January 2005
ISOWk M Tu W Thu F Sa Su
----- ----------------------------
51 13 14 15 16 17 18 19
52 20 21 22 23 24 25 26
53 27 28 29 30 31 1 2
1 3 4 5 6 7 8 9
2 10 11 12 13 14 15 16 */
// Outputs: 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";
// Outputs: 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";
// Outputs: 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";
// Outputs: 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";
Пример #4 Прикажи ги сите познати и непознати формати %e modifier
<?php
// Jan 1: results in: '%e%1%' (%%, e, %%, %e, %%)
$format = '%%e%%%e%%';
// Check for Windows to find and replace the %e
// modifier correctly
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format);
}
echo strftime($format);
%G и %V, кои се базираат на броевите на неделите ISO 8601:1988, можат да дадат неочекувани (иако точни) резултати ако системот за броење не е темелно разбран. Погледнете ги примерите за %V на оваа страница од прирачникот.
<?php
// Describe the formats
$strftimeFormats = array(
'A' => 'A full textual representation of the day',
'B' => 'Full month name, based on the locale',
'C' => 'Two digit representation of the century (year divided by 100, truncated to an integer)',
'D' => 'Same as "%m/%d/%y"',
'E' => '',
'F' => 'Same as "%Y-%m-%d"',
'G' => 'The full four-digit version of %g',
'H' => 'Two digit representation of the hour in 24-hour format',
'I' => 'Two digit representation of the hour in 12-hour format',
'J' => '',
'K' => '',
'L' => '',
'M' => 'Two digit representation of the minute',
'N' => '',
'O' => '',
'P' => 'lower-case "am" or "pm" based on the given time',
'Q' => '',
'R' => 'Same as "%H:%M"',
'S' => 'Two digit representation of the second',
'T' => 'Same as "%H:%M:%S"',
'U' => 'Week number of the given year, starting with the first Sunday as the first week',
'V' => 'ISO-8601:1988 week number of the given year, starting with the first week of the year with at least 4 weekdays, with Monday being the start of the week',
'W' => 'A numeric representation of the week of the year, starting with the first Monday as the first week',
'X' => 'Preferred time representation based on locale, without the date',
'Y' => 'Four digit representation for the year',
'Z' => 'The time zone offset/abbreviation option NOT given by %z (depends on operating system)',
'a' => 'An abbreviated textual representation of the day',
'b' => 'Abbreviated month name, based on the locale',
'c' => 'Preferred date and time stamp based on local',
'd' => 'Two-digit day of the month (with leading zeros)',
'e' => 'Day of the month, with a space preceding single digits',
'f' => '',
'g' => 'Two digit representation of the year going by ISO-8601:1988 standards (see %V)',
'h' => 'Abbreviated month name, based on the locale (an alias of %b)',
'i' => '',
'j' => 'Day of the year, 3 digits with leading zeros',
'k' => 'Hour in 24-hour format, with a space preceding single digits',
'l' => 'Hour in 12-hour format, with a space preceding single digits',
'm' => 'Two digit representation of the month',
'n' => 'A newline character ("\n")',
'o' => '',
'p' => 'UPPER-CASE "AM" or "PM" based on the given time',
'q' => '',
'r' => 'Same as "%I:%M:%S %p"',
's' => 'Unix Epoch Time timestamp',
't' => 'A Tab character ("\t")',
'u' => 'ISO-8601 numeric representation of the day of the week',
'v' => '',
'w' => 'Numeric representation of the day of the week',
'x' => 'Preferred date representation based on locale, without the time',
'y' => 'Two digit representation of the year',
'z' => 'Either the time zone offset from UTC or the abbreviation (depends on operating system)',
'%' => 'A literal percentage character ("%")',
);
// Results
$strftimeValues = array();
// Evaluate the formats whilst suppressing any errors
foreach ($strftimeFormats as $format => $description) {
if (false !== ($value = @strftime("%{$format}"))) {
$strftimeValues[$format] = $value;
}
}
// Find the longest value
$maxValueLength = 2 + max(array_map('strlen', $strftimeValues));
// Report known formats
foreach ($strftimeValues as $format => $value) {
echo "Known format : '{$format}' = ", str_pad("'{$value}'", $maxValueLength), " ( {$strftimeFormats[$format]} )\n";
}
// Report unknown formats
foreach (array_diff_key($strftimeFormats, $strftimeValues) as $format => $description) {
echo "Unknown format : '{$format}' ", str_pad(' ', $maxValueLength), ($description ? " ( {$description} )" : ''), "\n";
}Горниот пример ќе прикаже нешто слично на:
Known format : 'A' = 'Friday' ( A full textual representation of the day )
Known format : 'B' = 'December' ( Full month name, based on the locale )
Known format : 'H' = '11' ( Two digit representation of the hour in 24-hour format )
Known format : 'I' = '11' ( Two digit representation of the hour in 12-hour format )
Known format : 'M' = '24' ( Two digit representation of the minute )
Known format : 'S' = '44' ( Two digit representation of the second )
Known format : 'U' = '48' ( Week number of the given year, starting with the first Sunday as the first week )
Known format : 'W' = '48' ( A numeric representation of the week of the year, starting with the first Monday as the first week )
Known format : 'X' = '11:24:44' ( Preferred time representation based on locale, without the date )
Known format : 'Y' = '2010' ( Four digit representation for the year )
Known format : 'Z' = 'GMT Standard Time' ( The time zone offset/abbreviation option NOT given by %z (depends on operating system) )
Known format : 'a' = 'Fri' ( An abbreviated textual representation of the day )
Known format : 'b' = 'Dec' ( Abbreviated month name, based on the locale )
Known format : 'c' = '12/03/10 11:24:44' ( Preferred date and time stamp based on local )
Known format : 'd' = '03' ( Two-digit day of the month (with leading zeros) )
Known format : 'j' = '337' ( Day of the year, 3 digits with leading zeros )
Known format : 'm' = '12' ( Two digit representation of the month )
Known format : 'p' = 'AM' ( UPPER-CASE "AM" or "PM" based on the given time )
Known format : 'w' = '5' ( Numeric representation of the day of the week )
Known format : 'x' = '12/03/10' ( Preferred date representation based on locale, without the time )
Known format : 'y' = '10' ( Two digit representation of the year )
Known format : 'z' = 'GMT Standard Time' ( Either the time zone offset from UTC or the abbreviation (depends on operating system) )
Known format : '%' = '%' ( A literal percentage character ("%") )
Unknown format : 'C' ( Two digit representation of the century (year divided by 100, truncated to an integer) )
Unknown format : 'D' ( Same as "%m/%d/%y" )
Unknown format : 'E'
Unknown format : 'F' ( Same as "%Y-%m-%d" )
Unknown format : 'G' ( The full four-digit version of %g )
Unknown format : 'J'
Unknown format : 'K'
Unknown format : 'L'
Unknown format : 'N'
Unknown format : 'O'
Unknown format : 'P' ( lower-case "am" or "pm" based on the given time )
Unknown format : 'Q'
Unknown format : 'R' ( Same as "%H:%M" )
Unknown format : 'T' ( Same as "%H:%M:%S" )
Unknown format : 'V' ( ISO-8601:1988 week number of the given year, starting with the first week of the year with at least 4 weekdays, with Monday being the start of the week )
Unknown format : 'e' ( Day of the month, with a space preceding single digits )
Unknown format : 'f'
Unknown format : 'g' ( Two digit representation of the year going by ISO-8601:1988 standards (see %V) )
Unknown format : 'h' ( Abbreviated month name, based on the locale (an alias of %b) )
Unknown format : 'i'
Unknown format : 'k' ( Hour in 24-hour format, with a space preceding single digits )
Unknown format : 'l' ( Hour in 12-hour format, with a space preceding single digits )
Unknown format : 'n' ( A newline character ("\n") )
Unknown format : 'o'
Unknown format : 'q'
Unknown format : 'r' ( Same as "%I:%M:%S %p" )
Unknown format : 's' ( Unix Epoch Time timestamp )
Unknown format : 't' ( A Tab character ("\t") )
Unknown format : 'u' ( ISO-8601 numeric representation of the day of the week )
Unknown format : 'v'
Белешки
Забелешка: - Форматирај го датумот/времето како низа
Види Исто така
- Форматирај го времето/датумот GMT/UTC според локалните поставки DateTimeInterface::format()
- - Враќа датум форматиран според дадениот формат » Онлајн алатка за дизајн на формат strftime()
- - Земи Unix временски печат за датум
- setlocale() - Постави информации за локал
- mktime() - Земи Unix временски печат за датум
- strptime() - Парсирај време/датум генериран со strftime
- gmstrftime() - Парсирај време/датум генериран со strftime
- - Форматирај GMT/UTC време/датум според локалните поставки strftime()
Белешки од корисници 3 белешки
Some formats can be replaced with the `date` function, for example:
strftime("%Y-%m-%d", $time);
can be replaced with
date("Y-m-d", $time);Year is being displayed wrongly. It is displaying 2025 instead of 2024
E.g. strftime("%G-%B-%d %H:%M:%S", strtotime(date('2024-12-30 10:10:10')));
Output: 2025-December-30 10:10:10
Here G represents 4-digit year corresponding to the ISO week number. Based on this ISO week number year value will be displayed
Here B represents full month name
Here d represents day of the month (01 to 31)
Now because of this %G value we are getting the issue as ISO week number is calculated wrongly.
For example, If 30th December is falling on Monday, Tuesday, or Wednesday it is in W01 of the next year.
If it is on a Thursday, it is in W53 of the year just ending.
If on a Friday it is in W52 of the year just ending in common years and W53 in leap years.
If on a Saturday or Sunday, it is in W52 of the year just ending.
In this way week calculation happens and as 30th falls on Monday it is taking as W01 of the next year and it displays wrong year output.
For previous year no issue for this error because 30 and 31st Dec falls on sat or Sunday .
This same error occurs even if the Jan 1st falls on Friday. Then it will calculate it as W53 and displays the previous year value instead of current year.