Come posso ottenere la data e l'ora correnti in PHP?


Risposte:


623

Il tempo passerebbe dal tempo del tuo server. Una soluzione semplice per questo consiste nell'impostare manualmente il fuso orario utilizzando date_default_timezone_setprima di chiamare le funzioni date()o time().

Sono a Melbourne, in Australia , quindi ho qualcosa del genere:

date_default_timezone_set('Australia/Melbourne');

O un altro esempio è LA - US :

date_default_timezone_set('America/Los_Angeles');

Puoi anche vedere in quale fuso orario si trova attualmente il server tramite:

date_default_timezone_get();

Quindi qualcosa del tipo:

$timezone = date_default_timezone_get();
echo "The current server timezone is: " . $timezone;

Quindi la risposta breve alla tua domanda sarebbe:

// Change the line below to your timezone!
date_default_timezone_set('Australia/Melbourne');
$date = date('m/d/Y h:i:s a', time());

Quindi tutte le volte sarebbero nel fuso orario che hai appena impostato :)


101
La chiamata a time () è ridondante, date () utilizzerà automaticamente l'ora corrente.
troppo php il

11
OP non ha mai chiesto informazioni sul fuso orario. Una risposta più semplice e corretta mostrerebbe semplicemente l'ora del server.
AyexeM,

43
@AyexeM In realtà ho apprezzato le informazioni aggiuntive sul fuso orario. Mi ha salvato una seconda ricerca.
Marquizzo,

5
Puoi ottenere tutto il fuso orario da qui Fuso orario
Yousef Altaf

13
@AyexeM Una risposta più semplice e corretta non sarebbe quella di omettere informazioni potenzialmente importanti e correlate, ma invece di rispondere alla domanda, come suggerisci, ma quindi fornire ulteriori informazioni sui fusi orari sottostanti. Non è necessario omettere informazioni potenzialmente cruciali solo perché non sono state richieste.
Jamie,

524
// Simply:
$date = date('Y-m-d H:i:s');

// Or:
$date = date('Y/m/d H:i:s');

// This would return the date in the following formats respectively:
$date = '2012-03-06 17:33:07';
// Or
$date = '2012/03/06 17:33:07';

/** 
 * This time is based on the default server time zone.
 * If you want the date in a different time zone,
 * say if you come from Nairobi, Kenya like I do, you can set
 * the time zone to Nairobi as shown below.
 */

date_default_timezone_set('Africa/Nairobi');

// Then call the date functions
$date = date('Y-m-d H:i:s');
// Or
$date = date('Y/m/d H:i:s');

// date_default_timezone_set() function is however
// supported by PHP version 5.1.0 or above.

Per un riferimento di fuso orario, vedere Elenco dei fusi orari supportati .


12
Questa è una risposta molto più diretta di quella in alto. Grazie!
dev_willis,

1
Grazie per il collegamento dei fusi orari supportati, stavo per
cercarlo

190

Da PHP 5.2.0puoi usare la DateTime()classe:

use \Datetime;

$now = new DateTime();
echo $now->format('Y-m-d H:i:s');    // MySQL datetime format
echo $now->getTimestamp();           // Unix Timestamp -- Since PHP 5.3

E per specificare timezone:

$now = new DateTime(null, new DateTimeZone('America/New_York'));
$now->setTimezone(new DateTimeZone('Europe/London'));    // Another way
echo $now->getTimezone();

2
questa è una buona risposta, ma hai dimenticato di dire che dobbiamo usare \ Datetime prima di chiamarlo :) ty
Amor.o

@ Amor.o Grazie per l'heads-up, ho aggiornato la risposta ora - anche se un po 'in ritardo e sinceramente non ricordo di aver ricevuto una notifica per il tuo commento. Per quanto riguarda l'uso dello Datatimespazio dei nomi; Non ricordo se fosse il caso nel 2013 e non scrivo alcun codice PHP da anni. Indipendentemente da ciò, il tuo suggerimento sembra essere corretto, quindi grazie ancora.
Mahdi,


96

Riferimento: ecco un link

Ciò può essere più affidabile della semplice aggiunta o sottrazione del numero di secondi in un giorno o un mese a un timestamp a causa dell'ora legale.

Il codice PHP

// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
$today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)

sicuramente il migliore ~
Yash Kumar Verma il

67

PHP's time () restituisce un timestamp Unix corrente. Con questo, è possibile utilizzare la funzione date () per formattarla in base alle proprie esigenze.

$date = date('Format String', time());

Come Paolo ha menzionato nei commenti, il secondo argomento è ridondante. Il frammento seguente è equivalente a quello sopra:

$date = date('Format String');

17
il 2 ° argomento della funzione data viene assunto come time () se lasciato vuoto.
Paolo Bergantino,

66

Puoi usare la $_SERVER['REQUEST_TIME']variabile (disponibile da PHP 5.1.0) o la time()funzione per ottenere l'attuale timestamp Unix.


1
Vale la pena notare che il timestamp restituito dalla time()funzione è indipendente dal fuso orario. (Quindi chiamare date_default_timezone_set("your-particular-timezone");prima non avrà alcun effetto.)
ban-geoengineering

@ ban-geoengineering - non sono sicuro di cosa intendi per "indipendente dal fuso orario"; è "dipendente" dal fuso orario su cui è impostato il server? Puoi avere un server sulla costa orientale impostato su un fuso orario sulla costa occidentale o viceversa.
Neal Davis,

56

È possibile utilizzare sia la $_SERVER['REQUEST_TIME']variabile che la time()funzione. Entrambi restituiscono un timestamp Unix.

Il più delle volte queste due soluzioni produrranno esattamente lo stesso timestamp Unix . La differenza tra questi è che $_SERVER['REQUEST_TIME']restituisce il timestamp della richiesta del server più recente e time()restituisce l'ora corrente. Ciò può creare lievi differenze di precisione a seconda dell'applicazione, ma nella maggior parte dei casi entrambe queste soluzioni dovrebbero essere sufficienti.

In base al codice di esempio sopra riportato, vorrai formattare queste informazioni una volta ottenuto il timestamp Unix . Il tempo Unix non formattato è simile a:1232659628

Quindi, per ottenere qualcosa che funzioni, puoi usare la date()funzione per formattarlo.

Un buon riferimento per le modalità di utilizzo della date()funzione si trova nel Manuale PHP .

Ad esempio, il codice seguente restituisce una data simile alla seguente 01/22/2009 04:35:00 pm:

echo date("m/d/Y h:i:s a", time());

Come gestiscono server Web diversi $_SERVER['REQUEST_TIME'] ?
Pacerier

La migliore risposta a mani basse. Puoi anche aggiungere come andare dal timestamp UNIX alla data della persona normale che è molto apprezzata
Kolob Canyon

45

La funzione di data di PHP può fare questo lavoro.

Data()

Descrizione:

string date(string $format [, int $timestamp = time()])

Restituisce una stringa formattata in base alla stringa di formato specificata utilizzando il timestamp intero specificato o l'ora corrente se non viene fornito alcun timestamp.

Esempi:

$today = date("F j, Y, g:i a");               // March 10, 2001, 5:16 pm
$today = date("m.d.y");                       // 03.10.01
$today = date("j, n, Y");                     // 10, 3, 2001
$today = date("Ymd");                         // 20010310
$today = date('h-i-s, j-m-y, it is w Day');   // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day.
$today = date("D M j G:i:s T Y");             // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');   // 17:03:18 m is month
$today = date("H:i:s");                       // 17:16:18
$today = date("Y-m-d H:i:s");                 // 2001-03-10 17:16:18 (the MySQL DATETIME format)

27
 $date = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
 echo $date->format('d-m-Y H:i:s');

Aggiornare

 //Also get am/pm in datetime:
 echo $date->format('d-m-Y H:i:s a'); // output 30-12-2013 10:16:15 am

Per il formato della data, la funzione PHP date () è utile.



25

Perché il nuovo programmatore PHP potrebbe confondere il motivo per cui ci sono molti metodi per ottenere la data e l'ora correnti e quale usare nel loro progetto.

1. datemetodo (PHP 4, PHP 5, PHP 7)

Questo è il modo più comune e più semplice per ottenere la data e l'ora in php.

// set the default timezone to use. Available since PHP 5.1
date_default_timezone_set('UTC');


// Prints something like: Monday
echo date("l");

// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Prints: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

/* use the constants in the format parameter */
// prints something like: Wed, 25 Sep 2013 15:28:57 -0700
echo date(DATE_RFC2822);

// prints something like: 2000-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));

Puoi saperne di più qui

2. DateTimeclasse (PHP 5> = 5.2.0, PHP 7)

quando vuoi usare PHP con OOP, questo è il modo migliore per ottenere data e ora.

<?php
// Specified date/time in your computer's time zone.
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:sP') . "\n";

// Specified date/time in the specified time zone.
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

// Current date/time in your computer's time zone.
$date = new DateTime();
echo $date->format('Y-m-d H:i:sP') . "\n";

// Current date/time in the specified time zone.
$date = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

// Using a UNIX timestamp.  Notice the result is in the UTC time zone.
$date = new DateTime('@946684800');
echo $date->format('Y-m-d H:i:sP') . "\n";

// Non-existent values roll over.
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";
?>

Puoi saperne di più qui

3. Pacchetto data e ora carbonio

se stai usando Composer , Laravel , Symfony o qualsiasi tipo di framework, questo è il modo migliore per ottenere la data e l'ora. Anche questo pacchetto estende la classe DateTime in php in modo da usare tutto il metodo nella classe Datetime. Questo framework integrato come laravel, quindi non è necessario installarlo separatamente.

printf("Right now is %s", Carbon::now()->toDateTimeString());
printf("Right now in Vancouver is %s", Carbon::now('America/Vancouver')); // automatically converted to string
$tomorrow = Carbon::now()->addDay();
$lastWeek = Carbon::now()->subWeek();

// Carbon embed 823 languages:
echo $tomorrow->locale('fr')->isoFormat('dddd, MMMM Do YYYY, h:mm');
echo $tomorrow->locale('ar')->isoFormat('dddd, MMMM Do YYYY, h:mm');

$officialDate = Carbon::now()->toRfc2822String();

$howOldAmI = Carbon::createFromDate(1975, 5, 21)->age;

$noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London');

$internetWillBlowUpOn = Carbon::create(2038, 01, 19, 3, 14, 7, 'GMT');

if (Carbon::now()->isWeekend()) {
    echo 'Party!';
}
echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'

Puoi saperne di più qui

Spero che questo aiuti e se conosci altri modi per ottenere la data e l'ora, sentiti libero di modificare la risposta.


Mi sono piaciute alcune altre risposte che mostrano come formattare la stringa anche con testo personalizzato, o diciamo quale formato è meglio per MySQL ecc., Ma accetterei sicuramente questo per mostrare tutti e tre i tipi e gli usi: procedurale, orientato agli oggetti e framework OOP .
s3c,

1
@ s3c Avrei potuto rispondere a qualcosa del genere, ma la domanda è "Come posso ottenere la data e l'ora correnti in PHP?", il nostro obiettivo principale dovrebbe essere sulla domanda. :)
Supun Praneeth,

21

Uso:

$date = date('m/d/Y h:i:s a', time());

Funziona.


Quello che voglio dire è che il tempo ritorna EST quando sono PST ... ma perché? È l'ora del server e il server è EST? Posso ottenere tempo per gli utenti? Il loro server potrebbe essere un altro fuso orario, no?

La funzione di data è l'ora del tuo server, controlla o imposta temporaneamente / w PHP prima di eseguire la data.
TravisO,

grazie, il mio servizio non deve essere aggiornato con php perché O funziona per GMT ma non P o "e" fuso orario ... grazie !!

Questo $ date = date ('m / d / Y h: i: s a', time ()); ottiene la data del server ma ancora non mi ottiene la data dell'utente. Questo mi sta mostrando all'EST quando sono al PST. Voglio ottenere la data in cui l'utente invia il modulo e come me il loro server potrebbe trovarsi in un fuso orario diverso.

In realtà ora che ci penso il tempo non è così importante come la data. GRAZIE A TUTTI!!

18
echo date("d-m-Y H:i:sa");

Questo codice otterrà la data e l'ora del server su cui il codice viene eseguito.


1
Sottovalutato per risposta fuorviante. No, non otterrà l'ora del tuo computer locale, a meno che tu non stia eseguendo il server anche localmente. Otterrà la data e l'ora del server.
MattWithoos,

@MattWithoos - "Questo codice otterrà la data e l'ora del" server ", non ha detto nulla del" computer locale "che hai detto. Non devi nemmeno eseguire il server" localmente "- puoi avere un server in qualsiasi parte del mondo impostato su qualsiasi fuso orario desiderato. Il tuo voto negativo è stato completamente sbagliato e senza motivo
Neal Davis

1
@NealDavis Hai pensato di guardare la modifica? Ho pubblicato quel commento, ho suggerito una modifica delle informazioni errate e nel frattempo ho aspettato che fosse approvato. Ora è approvato e mostra le informazioni corrette.
MattWithoos,

1
@NealDavis Inoltre, se ti sei preoccupato di leggere il post originale, ha letteralmente detto "Questo codice otterrà la data e l'ora del tuo computer locale (PC)". È assolutamente fuorviante.
MattWithoos,

16

Puoi usare questo formato anche:

$date = date("d-m-Y");

O

$date = date("Y-m-d H:i:s");

14

Secondo l'articolo Come ottenere il datetime corrente (NOW) con PHP , ci sono due modi comuni per ottenere la data corrente. Per ottenere il datetime corrente (ora) con PHP, puoi usare la dateclasse con qualsiasi versione di PHP, o meglio la datetimeclasse con PHP> = 5.2.

Varie espressioni in formato data sono disponibili qui.

Esempio usando la data

Questa espressione tornerà ORA in formato Y-m-d H:i:s.

<?php
    echo date('Y-m-d H:i:s');
?>

Esempio usando la classe datetime

Questa espressione tornerà ORA in formato Y-m-d H:i:s.

<?php
    $dt = new DateTime();
    echo $dt->format('Y-m-d H:i:s');
?>

13
<?php
echo "<b>".date('l\, F jS\, Y ')."</b>";
?>

Stampa in questo modo

Domenica 9 dicembre 2012


12
<?php
// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
$today = date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)
?>

11

Imposta il tuo fuso orario:

date_default_timezone_set('Asia/Calcutta');

Quindi chiamare le funzioni della data

$date = date('Y-m-d H:i:s');

11
date(format, timestamp)

La datefunzione restituisce una stringa formattata in base alla stringa di formato specificata utilizzando la data / ora intera indicata o l'ora corrente se non viene fornita alcuna data / ora. In altre parole,timestamp è facoltativo e il valore predefinito è time ().

E i parametri sono -

formato: obbligatorio. Specifica il formato del timestamp

timestamp: (facoltativo) specifica un timestamp. L'impostazione predefinita è la data e l'ora correnti

Come ottenere un appuntamento semplice

Il parametro di formato richiesto per la date()funzione specifica come formattaredate (or time) .

Ecco alcuni caratteri che sono comunemente usati per le date:

  1. d - Rappresenta il giorno del mese (da 01 a 31)
  2. m - Rappresenta un mese (da 01 a 12)
  3. Y - Rappresenta un anno (in quattro cifre)
  4. l ('L' minuscola) - Rappresenta il giorno della settimana

Altri personaggi, come "/", ".", or "-" possono anche essere inseriti tra i caratteri per aggiungere ulteriore formattazione.

L'esempio seguente formatta la data odierna in tre modi diversi:

<?php
    echo "Today is " . date("Y/m/d") . "<br>";
    echo "Today is " . date("Y.m.d") . "<br>";
    echo "Today is " . date("Y-m-d") . "<br>";
    echo "Today is " . date("l");
?>

Alcuni link utili


10

Se desideri un calendario diverso, utilizza:

$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));
$nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);

date_default_timezone_set("Asia/Calcutta");
echo date("Y/m/d H:i:s");

Cosa intendi con "scala temporale"?
Peter Mortensen,

"fuso orario", probabilmente.
Saneem,

2
Credo che @Jaymin possa significare se vuoi regolare l'ora in anticipo un giorno, indietro di un mese, ecc.
Just Plain High

10
date_default_timezone_set('Europe/Warsaw');
echo("<p class='time'>".date('H:i:s')."</p>");
echo("<p class='date'>".date('d/m/Y')."</p>");

10

Anche il formato della data dipende:

echo date("d/m/Y H:i:sa"); // 13/04/2017 19:38:15pm

Questo è difficilmente comprensibile. Puoi elaborare?
Peter Mortensen,

10

Puoi usare questo codice:

<?php
    $currentDateTime = date('Y-m-d H:i:s');
    echo $currentDateTime;
?>

9

Ho scoperto che il modo più semplice per ottenere l'ora corrente in PHP è qualcosa di simile.

//Prints out something like 10:00am Just be sure to set your timezone correctly.
date_default_timezone_set("America/Chicago");
$TIME = date('G:ia'); 

8

Un altro modo semplice è quello di prendere il timestamp della data e ora correnti. Usa la funzione mktime () :

$now = mktime(); // Return timestamp of the current time

Quindi puoi convertirlo in un altro formato data:

//// Prints something like: Thursday 26th of January 2017 01:12:36 PM
echo date('l jS \of F Y h:i:s A',$now);

Altri formati di data sono qui: http://php.net/manual/en/function.date.php



6
// Set the default timezone to use. Available since PHP 5.1
date_default_timezone_set('UTC');


// Prints something like: Monday
echo date("l");

// Prints something like: Monday 8th of August 2016 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Prints: July 1, 2016 is on a Saturday
echo "July 1, 2016 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2016));

/* Use the constants in the format parameter */
// Prints something like: Wed, 25 Sep 2013 15:28:57 -0700
echo date(DATE_RFC2822);

// Prints something like: 2016-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));

6

Se sei il Bangladesh e se vuoi avere il tempo di Dhaka, usa questo:

$date = new DateTime();
$date->setTimeZone(new DateTimeZone("Asia/Dhaka"));
$get_datetime = $date->format('d.m.Y H:i:s');

6

Normalmente, questa funzione per la data è utile per tutti: data ("Y / m / d");

Ma il tempo è qualcosa di diverso, perché la funzione ora dipende dalla versione di PHP o dalla data di sistema.

Quindi probabilmente usalo in questo modo per ottenere il nostro fuso orario:

$date = new DateTime('now', new DateTimeZone('Asia/Kolkata'));
echo $date->format('H:m:s');

Questa funzione mostra il tempo di 24 ore.


ha fissato la data a 1970 per me!
iKamy,

5

Ecco alcuni personaggi che sono comunemente usati per i tempi:

  1. h - formato di 12 ore di un'ora con zeri iniziali (da 01 a 12)
  2. i - Minuti con zeri iniziali (da 00 a 59)
  3. s - Secondi con zeri iniziali (da 00 a 59)
  4. a - Ante meridiem e Post meridiem minuscoli (am o pm)

Ottieni il tuo fuso orario

<?php
    date_default_timezone_set("America/New_York");
    echo "The time is " . date("h:i:sa");
?>

Dai un'occhiata (opzionale)

<?php
    $d = mktime(11, 14, 54, 8, 12, 2014);
    echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

Per data

<?php
    echo "Today is " . date("Y/m/d") . ;
    echo "Today is " . date("Y.m.d") . ;
    echo "Today is " . date("Y-m-d") . ;
    echo "Today is " . date("l");
?>

Ecco alcuni caratteri che sono comunemente usati per le date:

  1. d - Rappresenta il giorno del mese (da 01 a 31)
  2. m - Rappresenta un mese (da 01 a 12)
  3. Y - Rappresenta un anno (in quattro cifre)
  4. l ('L' minuscola) - Rappresenta il giorno della settimana

Fonte-W3-Schools


1
Qual è lo scopo del trailing .in date("Y/m/d") . ;?
Peter Mortensen,

Per concatenare un'altra stringa o variabile suppongo. Grazie per le tue modifiche. :-)
Raheel Khan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.