PHP 8.4.2 Released!

strtotime

(PHP 4, PHP 5, PHP 7, PHP 8)

strtotimeAnalizza qualsiasi descrizione datetime testuale inglese e la converte in uno Unix timestamp

Descrizione

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

La funzione si aspetta una stringa contenente un formato di data inglese e proverà ad analizzare quel formato ed a convertirlo in uno Unix timestamp (il numero di secondi dall'1 Gennaio 1970 00:00:00 UTC), relativo al timestamp dato in now, oppure all'ora corrente se non viene fornito now.

Ogni parametro di questa funzione usa il fuso orario predefinito a meno che non sia specificato il fuso orario in quel parametro. Badare a non usare diversi fusi orari in ogni parametro a meno che non sia intenzionale. Vedere date_default_timezone_get() sui vari modi per definire il fuso orario predefinito.

Elenco dei parametri

time

Una stringa data/ora. I formati validi sono descritti in Formati di Data e Tempo.

now

Il timestamp che è usato come base per il calcolo delle date relative.

Valori restituiti

Restituisce un timestamp in caso di successo, altrimenti false. Prima di PHP 5.1.0, questa funzione restituiva -1 in caso di fallimento.

Errori/Eccezioni

Ogni chiamata a una funzione data/ora genera un E_NOTICE se il time zone non è valido, e/o un messaggio E_STRICT o E_WARNING se si usano le impostazioni di sistema o la variabile d'ambiente TZ. Vedere anche date_default_timezone_set()

Log delle modifiche

Versione Descrizione
5.3.0 Prima di PHP 5.3.0, i formati del tempo relativi forniti all'argomento time di strtotime() come this week, previous week, last week, e next week erano interpretati per intendere un periodo di 7 giorni relativo alla data/ora corrente, invece di un periodo settimanale di Monday a Sunday.
5.3.0 Prima di PHP 5.3.0, 24:00 non era un formato valido e strtotime() restituiva false.
5.2.7 In PHP 5 precedente a 5.2.7, richiedere una data occorrenza di un dato giorno della settimana in un mese dove il giorno della settimana era il primo giorno del mese aggiungerebbe in modo scorretto una settimana al timestamp restituito. Questo è stato corretto in 5.2.7 e nelle versioni successive.
5.1.0 Ora restituisce false in caso di fallimento, invece di -1.
5.1.0

Ora emette gli errori time zone E_STRICT e E_NOTICE

5.0.2 In PHP 5 fino a 5.0.2, "now" e altri tempi relativi sono erroneamente calcolati a partire dalla mezzanotte di oggi. Questo differisce dalle altre versioni in cui viene correttamente calcolato dal tempo corrente.
5.0.0 I microsecondi hanno cominciato ad essere consentiti, ma sono ignorati.

Esempi

Example #1 Un esempio di 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 Controllo per il fallimento

<?php
$str
= 'Not Good';

// prima di PHP 5.1.0 si sarebbe dovuto fare il confronto con -1, invece di false
if (($timestamp = strtotime($str)) === false) {
echo
"The string ($str) is bogus";
} else {
echo
"$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}
?>

Note

Nota:

Se è specificato il numero dell'anno in un formato a due cifre, i valori tra 00-69 sono mappati a 2000-2069 e 70-99 a 1970-1999. Guardare le note sotto per le possibili differenze sui sistemi 32bit (le possibili date potrebbero finire sul 2038-01-19 03:14:07).

Nota:

Il range valido di un timestamp è tipicamente da Fri, 13 Dec 1901 20:45:54 UTC a Tue, 19 Jan 2038 03:14:07 UTC. (Queste sono le date che corrispondono al minimo e al massimo valore per un intero con segno a 32-bit.)

Prima di PHP 5.1.0, non tutte le piattaforme supportano timestamp negativi, perciò il range delle date può essere limitato a non prima della Unix epoch. Questo significa che per esempio le date prima di Jan 1, 1970 non funzioneranno su Windows, alcune distribuzioni Linux, e pochi altri sistemi operativi.

Per le versioni di PHP a 64-bit, il range valido di un timestamp è effettivamente infinito, dato che 64 bit possono rappresentare approssimativamente 293 miliardi di anni in entrambi le direzioni.

Nota:

Le date nei formati m/d/y o d-m-y sono differenziati in base al separatore tra i vari componenti: se il separatore è uno slash (/), allora è assunto l'americano m/d/y; mentre se il separatore è un trattino (-) o un puntino (.), allora è assunto il formato europeo d-m-y. Se, comunque, l'anno viene dato in un formato a due cifre e il separatore è un trattino (-, la stringa data è analizzata come y-m-d.

Per evitare potenziali ambiguità, è meglio usare le date ISO 8601 (YYYY-MM-DD) o DateTime::createFromFormat() quando possibile.

Nota:

Usando questa funzione per operazioni matematiche non è consigliabile. È meglio usare DateTime::add() e DateTime::sub() in PHP 5.3 e successivi, o DateTime::modify() in PHP 5.2.

Vedere anche:

add a note

User Contributed Notes 5 notes

up
13
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
6
info at pipasjourney dot com
1 year 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
2
elsiland at yahoo dot com
2 months ago
Not sure why, but
<?php
echo strtotime("+2 hours"), "\n";
echo
strtotime("+2 hrs"), "\n";
echo
strtotime("+2 hourss"), "\n";
?>

are returning +2 hours, -2 hours, +8 hours. The latter two should be errors instead.
up
0
event at mail dot de
1 day ago
'timestamp_sdt' for counting from zero hours of a specific day

<?php

echo $timestamp_sdt = strtotime(date('d.m.Y',time()).'00.00.00')*1000; echo '<br><br>';

echo
date('d.m.Y H.i.s', $timestamp_sdt/1000); echo '<br><br>';

?>

will give out:

1734649200000

20.12.2024 00.00.00
up
0
et dot coder at gmail dot com
8 months ago
> The Unix timestamp that this function returns does not contain information about time zones. In order to do calculations with date/time information, you should use the more capable DateTimeImmutable.

important - does not contain

<?php
date_default_timezone_set
('Europe/Berlin');

// .... a lot of code

echo $a = strtotime('yesterday 00:00');

// in $a hour = 23:00:00 and you may not know about it
// https://onlinephp.io/c/ef696
// use DateTimeImmutable
To Top