PHP Velho Oeste 2024

strtotime

(PHP 4, PHP 5, PHP 7)

strtotimeTranslează aproape orice descriere textuală în limba engleză a datei și orei într-un timestamp Unix

Descrierea

strtotime ( string $datetime , int $now = time() ) : int

Funcția așteaptă un șir de caractere conținând un format de dată engleză și încearcă să transforme acest format într-un timestamp Unix (numărul de secunde de la 1 Ianuarie 1970 00:00:00 UTC), în raport cu timestamp-ul dat în parametrul now, sau cu ora curentă dacă parametrul now nu este furnizat.

Avertizare

Timestamp-ul Unix pe care îl întoarce această funcție nu conține informații despre fusurile orare. Pentru a efectua calcule cu informații dată/oră trebuie utilizate obiecte DateTimeImmutable mai capabile.

Fiecare parametru al acestei funcții utilizează fusul orar implicit, afară de cazul când fusul orar este specificat în acel parametru. Fiți atenți să nu utilizați diferite fusuri orare în fiecare parametru, afară de cazul când anume așa se intenționează. Vedeți date_default_timezone_get() pentru diferite metode de a defini fusul orar implicit.

Parametri

datetime

Un șir dată/oră. Formatele valide sunt explicate în Formatele datelor și orelor.

now

Timestamp-ul care este utilizat ca bază pentru calcularea datelor relative.

Valorile întoarse

Întoarce un timestamp în caz de succes, false în caz contrar. Înainte de PHP 5.1.0, această funcție întorcea -1 în caz de eșec.

Erori/Excepții

Fiecare apel al unei funcții de dată/oră va genera o E_NOTICE dacă zona orară nu este validă și/sau un mesaj E_STRICT sau E_WARNING dacă se utilizează setările sistemului sau variabila de mediu TZ. Vedeți de asemenea date_default_timezone_set()

Exemple

Example #1 Exemplu strtotime()

<?php
echo strtotime("now"), "\n";
echo 
strtotime("10 September 2000"), "\n";
echo 
strtotime("+1 day"), "\n";
echo 
strtotime("+1 week"), "\n";
echo 
strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo 
strtotime("next Thursday"), "\n";
echo 
strtotime("last Monday"), "\n";
?>

Example #2 Verificarea eșecului

<?php
$str 
'Nu e bine';

// înainte de PHP 5.1.0 ar fi trebuit de comparat cu -1, în loc de false
if (($timestamp strtotime($str)) === false) {
    echo 
"String-ul ($str) nu este corect";
} else {
    echo 
"$str == " date('l dS \o\f F Y h:i:s A'$timestamp);
}
?>

Note

Notă:

Dacă anul este specificat cu două cifre, valorile între 00-69 sunt interpretate ca 2000-2069, iar valorile între 70-99 ca 1970-1999. Vedeți notele de mai jos pentru posibilele diferențe pe sistemele pe 32 de biți (datele posibile pot să se încheie cu 2038-01-19 03:14:07)

Notă:

Domeniul valid al unui timestamp este de obicei de la Fri, 13 Dec 1901 20:45:54 UTC până la Tue, 19 Jan 2038 03:14:07 UTC. (Acestea sunt datele ce corespund valorilor minimă și maximă pentru un întreg pe 32 biți cu semn.)

Anterior versiunii PHP 5.1.0, nu toate platformele susțin timestamp-uri negative, de aceea domeniul datelor poate fi limitat la valorile de după Epoca Unix. Aceasta înseamnă că de ex. datele de până la 1 Ianuarie 1970 nu vor fi valide în Windows, unele distributive Linux, și alte câteva sisteme de operare.

Pentru versiunile PHP pe 64 de biți domeniul valid a unui timestamp este practic infinit, deoarece pe 64 de biți se pot reprezenta aproximativ 293 milioane de ani în ambele direcții.

Notă:

Datele în formatul m/d/y sau d-m-y sunt disambiguate analizând separatorul dintre deferite componente: dacă separatorul este slash (/), atunci este utilizat formatul American m/d/y; iar dacă separatorul este liniuța (-) sau punctul (.), atunci este utilizat formatul European d-m-y. Însă dacă anul e furnizat în format cu două cifre și separatorul este liniuța (-), atunci șirul cu data va fi interpretat ca y-m-d.

Pentru a evita o potențială ambiguitate, cel mai bine este de a utiliza date în format ISO 8601 (YYYY-MM-DD) sau DateTime::createFromFormat() atunci când este posibil.

Notă:

Utilizarea acestei funcții pentru operații matematice nu este recomandabilă. Este mai bine de a utiliza DateTime::add() și DateTime::sub() în PHP 5.3 și ulterior, sau DateTime::modify() în PHP 5.2.

A se vedea și

add a note add a note

User Contributed Notes 4 notes

up
10
cesarfrisa at yahoo dot es
10 months ago
This is the link to the relative formats that can be used in this function. It's not easy to find in the documentation.

https://www.php.net/manual/en/datetime.formats.relative.php

Here some examples:
<?php
$today
= date( 'Y-m-d', strtotime( 'today' ) );
echo
"Today: " . $today;

// Print: Today: 2023-06-01

//Basic Example
$tomorrow = date( 'Y-m-d', strtotime( 'tomorrow' ) );
echo
"\n\nTomorrow: " . $tomorrow;

// Print: Tomorrow: 2023-06-02

$yesterday = date( 'Y-m-d', strtotime( 'yesterday' ) );
echo
"\n\nYesterday: " . $yesterday;

// Print: Yesterday: 2023-05-31

// Add o subtract Month
$variable = date( 'Y-m-d', strtotime( '+1 month' ) );
echo
"\n\nAdd one month: " . $variable;

// Print: Add one month: 2023-07-01

$variable = date( 'Y-m-d', strtotime( '-1 month' ) );
echo
"\n\nSubstract one month: " . $variable;

// Print: Substract one month: 2023-05-01

// More complex formats:
// ERROR / BUG: If today is the last day of the month. This examples can be one error or bug.
// If you are looking el first day of previous or next month you dont must use last Relative Format.
// You must use 'first day of 2 months ago' or 'first day of previous month'
// See you:
// https://bugs.php.net/bug.php?id=22486
// https://bugs.php.net/bug.php?id=44073
// strtotime("+1 Month")
// produces the wrong result on the 31st day of the month.
// on January 31, date("m",strtotime("+1 Month")) will return 03 instead of 02

// Another example:
$dt1 = strtotime("2023-01-30");
$month = strtotime("+1 month", $dt1);
echo
"\n\nToday is: " . date( 'Y-m-d', $dt1 );
echo 
"\nBUG add month: " . date("Y-m-d", $month);

// Print:
// Today is: 2023-01-30
// BUG add month: 2023-03-02

$dt1 = strtotime("2023-02-28");
$month = strtotime("-1 month", $dt1);
echo
"\n\nToday is: " . date( 'Y-m-d', $dt1 );
echo 
"\nBUG substract month: " . date("Y-m-d", $month);

// Print:
// Today is: 2023-02-28
// BUG substract month: 2023-01-28

$dt1 = strtotime("2023-01-30");
$month = strtotime("first day of next month", $dt1);
echo
"\n\nToday is: " . date( 'Y-m-d', $dt1 );
echo 
"\nFirst day of next month: " . date("Y-m-d", $month);

// Print:
// Today is: 2023-01-30
// First day of next month: 2023-02-01

$dt1 = strtotime("2023-02-28");
$month = strtotime("last day of last month", $dt1);
echo
"\n\nToday is: " . date( 'Y-m-d', $dt1 );
echo 
"\nLast day of last month: " . date("Y-m-d", $month);

// Print:
// Today is: 2023-02-28
// Last day of last month: 2023-01-31

$dt1 = strtotime("2023-02-28");
$month = strtotime("first day of 2 months ago", $dt1);
echo
"\n\nToday is: " . date( 'Y-m-d', $dt1 );
echo 
"\nFirst day of 2 months ago: " . date("Y-m-d", $month);

// Print:
// Today is: 2023-02-28
// First day of 2 months ago: 2022-12-01

?>
up
7
info at pipasjourney dot com
10 months ago
Be aware of this: 1 month before the 31st day, it will return the same month:

<?php
echo date('m', strtotime('2023-05-30 -1 month')) ; //returns 04
echo date('m', strtotime('2023-05-31 -1 month')) ; //returns 05, not 04
?>

So, don't use this to operate on the month of the result.
A better way to know what month was the previous month would be:

<?php
//considering today is 2023-05-31...

$firstOfThisMonth = date('Y-m') . '-01'; //returns 2023-05-01
echo date('m', strtotime($firstOfThisMonth . ' -1 month')) ; //returns 04
?>
up
8
Vyacheslav Belchuk
1 year ago
Be careful when using two numbers as the year. I came across this situation:

<?php

echo strtotime('24.11.22');
echo
date('d.m.Y H:i:s', 1669324282)  .  "\n\n";

// But
echo strtotime('24.11.2022');
echo
date('d.m.Y H:i:s', 1669237200);

?>

Output:

1669324282
25.11.2022 00:11:22

1669237200
24.11.2022 00:00:00
up
-5
MarkAgius at markagius dot co dot uk
11 months ago
Note:
If day of month is 12 or less, or year is entered as a two digit number and less than 31 or 12 then you may get the wrong time value.
If you know the format used with the date string, then use the following code: (PHP version 5.5 or later)
[code]
function getStrtotime($timeDateStr, $formatOfStr="j/m/Y"){
  // Same as strtotime() but using the format $formatOfStr.
  // Works with PHP version 5.5 and later.
  // On error reading the time string, returns a date that never existed. 3/09/1752 Julian/Gregorian calendar switch.
  $timeStamp = DateTimeImmutable::createFromFormat($formatOfStr,$timeDateStr);
  if($timeStamp===false){
    // Bad date string or format string.
    return -6858133619; // 3/09/1752
  } else {
    // Date string and format ok.
    return $timeStamp->format("U"); // UNIX timestamp from 1/01/1970,  0:00:00 gmt
  }
}

print date("j/m/Y", getStrtotime("1/02/2022", "j/m/Y"))." Standard format. (j)<BR>\n";
print date("j/m/Y", getStrtotime("1/02/2022", "d/m/Y"))." Standard format. (d)<BR>\n";
print date("j/m/Y", getStrtotime("1/02/2022", "j/m/y"))." Standard format. (y) &lt;-- Bad date as 2022 is not two digits.<BR>\n";
print date("j/m/Y", getStrtotime("21/02/2022", "j/m/Y"))." Standard format. (j)<BR>\n";
print date("j/m/Y", getStrtotime("21/02/2022", "d/m/Y"))." Standard format. (d)<BR>\n";
print date("j/m/Y", getStrtotime("2/01/2022", "m/j/Y"))." US format.<BR>\n";
print date("j/m/Y", getStrtotime("2-01-22", "m-j-y"))." Two digit year, US format. (Y)<BR>\n";
print date("j/m/Y", getStrtotime("2-01-22", "m-j-Y"))." Two digit year, US format. (y) &lt;-- Wrong year if two digits.<BR>\n";
print date("j/m/Y", getStrtotime("3/09/1752", "j/m/Y"))." No such date.<BR>\n";
print date("j/m/Y", getStrtotime("50/00/19999", "j/m/Y"))." Bad date string.<BR>\n";
print date("j/m/Y", getStrtotime("1-02-2022", "j/m/Y"))." Wrong - or / used.<BR>\n";
[/code]
Output:
1/02/2022 Standard format. (j)
1/02/2022 Standard format. (d)
3/09/1752 Standard format. (y) <-- Bad date as 2022 is not two digits.
21/02/2022 Standard format. (j)
21/02/2022 Standard format. (d)
1/02/2022 US format.
1/02/2022 Two digit year, US format. (Y)
1/02/0022 Two digit year, US format. (y) <-- Wrong year if two digits.
3/09/1752 No such date.
3/09/1752 Bad date string.
3/09/1752 Wrong - or / used.
To Top