NOW()-functie in PHP

Is er een PHP-functie die de datum en tijd retourneert in hetzelfde formaat als de MySQL-functie now()?

Ik weet hoe ik het moet doen met date(), maar ik vraag of er alleen hiervoor een functie is.

Bijvoorbeeld om terug te keren:

2009-12-01 00:00:00

Antwoord 1, autoriteit 100%

U kunt de functie datum gebruiken:

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

Antwoord 2, autoriteit 14%

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

Kijk hier voor meer details: http://pl.php.net/ handleiding/en/function.date.php


Antwoord 3, autoriteit 11%

Met PHP-versie >= 5.4 kan DateTime dit doen:-

echo (new \DateTime())->format('Y-m-d H:i:s');

Zie het werken.


Antwoord 4, autoriteit 3%

Gebruik deze functie:

function getDatetimeNow() {
    $tz_object = new DateTimeZone('Brazil/East');
    //date_default_timezone_set('Brazil/East');
    $datetime = new DateTime();
    $datetime->setTimezone($tz_object);
    return $datetime->format('Y\-m\-d\ h:i:s');
}

Antwoord 5, autoriteit 3%

Kort antwoord

$now = date_create()->format('Y-m-d H:i:s');

Lees hieronder voor het lange antwoord.




De nabootsing van de MySQL NOW()-functie in PHP

Hier is een lijst met manieren in PHP die de MySQL now()-functie nabootsen.

// relative date
$now = date_create('now')->format('Y-m-d H:i:s'); // works in php 5.2 and higher  
$now = date_create()->format('Y-m-d H:i:s'); // also works in php 5.2
$now = new DateTime('now')->format('Y-m-d H:i:s'); // syntax error!!!
$now = (new DateTime('now'))->format('Y-m-d H:i:s'); // works in php 5.4 and higher   
$now = date('Y-m-d H:i:s'); // Slightly higher performance, but less usable for date/time manipulations
// From Unix timestamp
// Using date_create() with a Unix timestamp will give you a FALSE,  
// and if you try to invoke format() on a FALSE then you'll get a: 
//     Fatal error: Call to a member function format() on boolean 
// So if you work with Unix timestamps then you could use: date_create_from_format().
$unixTimeStamp = 1420070400; // 01/01/2015 00:00:00
$y2015 = date_create_from_format('U', $unixTimeStamp, timezone_open('Europe/Amsterdam'))->format('Y-m-d H:i:s');
$y2015 = date('Y-m-d H:i:s', $unixTimeStamp);

Ik denk dat date_create()->format('Y-m-d H:i:s') de beste manier is, omdat je met deze aanpak gemakkelijker tijd-/tijdzonemanipulaties kunt afhandelen dan date('Y-m-d H:i:s') en het werkt sinds php 5.2.


MySQL NOW()-functie

De MySQL-functie now() geeft de dateTime-waarde in dit formaat: 'YYYY-MM-DD HH:MM:SS'. Zie hier: https://dev. mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now.

Een interessant feit is dat het mogelijk is om de datum/tijd-notatie te krijgen door deze query uit te voeren: SHOW VARIABLES LIKE 'd%e_format', het resultaat zou ongeveer als volgt kunnen zijn:

Variable_name     Value     
date_format       %Y-%m-%d
datetime_format   %Y-%m-%d %H:%i:%s

De variabelen hierboven zijn alleen-lezen variabelen. Je kunt het dus niet veranderen.

Ik denk dat de MySQL now() functie zijn formaat krijgt van de datetime_format variabele.




De voordelen van date_create()->format() in plaats van date() samenvatting

De gunstige feiten van date_create('now')->format('Y-m-d H:i:s') over date('Y-m-d H:i:s') zijn:

  • gemakkelijker om te gaan met tijdmanipulaties
  • gemakkelijker om met tijdzones om te gaan
  • o.o.p.

De nadelen van date_create()->format() in plaats van date()

De functie date() presteert iets beter dan date_create()->format(). Zie benchmarktest hieronder.

$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $a = date_create('now')->format('Y-m-d H:i:s');
}
$end = time();                  
$elapsedTimeA = $end - $start;
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';
$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $b = date('Y-m-d H:i:s');
}
$end = time();                   
$elapsedTimeB = $end - $start;
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 31
Case B, elapsed time in seconds: 14

De hoofdletters laten zien dat date() sneller is. Als we het testscenario echter een beetje veranderen, zal de uitkomst anders zijn. Zie hieronder:

$start = time();
$dt = date_create('now');
for ($i = 0; $i <= 5000000; $i++) {
    $a = $dt->format('Y-m-d H:i:s');
}
$end = time();                  
$elapsedTimeA = $end - $start;
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
echo '<br>';
$start = time();
for ($i = 0; $i <= 5000000; $i++) {
    $b = date('Y-m-d H:i:s');
}
$end = time();                   
$elapsedTimeB = $end - $start;
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
echo '<br>';
// OUTPUT
Case A, elapsed time in seconds: 14
Case B, elapsed time in seconds: 15

De DateTime-methode: format() is hier sneller dan date().




De voordelen van date_create()->format() in plaats van date() gedetailleerd

Lees verder voor de uitgebreide uitleg.

gemakkelijker om te gaan met tijdmanipulaties

date_create() accepteert een relatief datum/tijd-formaat (zoals now, yesterday of +1 day ) zie deze link, voorbeeld:

$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s'); 

date() accepteert ook een relatief datum/tijd-formaat, zoals dit:

$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
$tomorrow = date('Y-m-d H:i:s', (time() + 86400)); // 86400 seconds = 1 day

gemakkelijker om te gaan met tijdzones

Als tijdzones ertoe doen, is het gebruik van date_create()->format() veel logischer dan date() omdat date() gebruikt de standaard tijdzone die is geconfigureerd in php.ini bij de date.timezone richtlijn. Link: http://php.net/manual/en/datetime .configuration.php#ini.date.timezone .

Het is mogelijk om de tijdzone tijdens runtime te wijzigen. Voorbeeld:

date_default_timezone_set('Asia/Tokyo');.

Het nadeel hiervan is dat het van invloed is op alle datum-/tijdfuncties. Dit probleem bestaat niet als je date_create()->format() gebruikt in combinatie met timezone_open().

PHP ondersteunt belangrijke tijdzones. Het grappige is dat het zelfs de poolcirkel en Antarctica ondersteunt. Heb je ooit gehoord van Longyearbyen? Zo niet, maak je dan geen zorgen, ik ook niet totdat ik de officiële PHP-documentatie las.

$nowLongyearbyen = date_create('now', timezone_open('Arctic/Longyearbyen'))->format('Y-m-d H:i:s');

Bekijk een lijst met alle ondersteunde tijdzones:
http://php.net/manual/en/timezones.php.

o.o.p.

O.O.P. maakt gebruik van state-full objecten. Dus ik denk liever op deze manier:

// Create a DateTime Object. 
// Use the DateTime that applies for tomorrow.
// Give me the datetime in format 'Y-m-d H:i:s'
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s'); 

Om dan op deze manier te denken:

// Give me a date time string in format 'Y-m-d H:i:s', 
// use strtotime() to calculate the Unix timestamp that applies for tomorrow.
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));

Daarom zou ik zeggen dat de date_create()->format() benadering voor mij beter leesbaar is dan date().




date_create() VS nieuwe DateTime()

De gunstige feiten van date_create() over new DateTime() zijn:

  • Naamruimten

Naamruimten

Als je in een naamruimte werkt en een DateTime-object wilt initialiseren met het nieuwe sleutelwoord, dan moet je het als volgt doen:

namespace my_namespace;
// The backslash must be used if you are in a namespace.
// Forgetting about the backslash results in a fatal error.
$dt = new \DateTime();

Hier is niets mis mee, maar het nadeel van het bovenstaande is dat mensen de backslash sporadisch vergeten. Door de date_create() constructorfunctie te gebruiken, hoeft u zich geen zorgen te maken over naamruimten.

$dt = date_create(); // in or not in a namespace it works in both situations




Voorbeeld van date_create()->format()

Ik gebruik deze aanpak voor mijn projecten als ik een array moet vullen. Zoals dit:

$array = array(
    'name' => 'John',
    'date_time' => date_create('now')->format('Y-m-d H:i:s'), // uses the default timezone
    'date_time_japan' => date_create('now', timezone_open('Asia/Tokyo'))->format('Y-m-d H:i:s'),
);

Antwoord 6, autoriteit 3%

Probeer dit:

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

Antwoord 7, autoriteit 2%

Ik was op zoek naar hetzelfde antwoord en ik heb deze oplossing bedacht voor PHP 5.3 of hoger:

$dtz = new DateTimeZone("Europe/Madrid"); //Your timezone
$now = new DateTime(date("Y-m-d"), $dtz);
echo $now->format("Y-m-d H:i:s");

Antwoord 8, autoriteit 2%

Nog een antwoord dat ik gemakkelijk te gebruiken vind:

echo date('c');
// 2015-07-27T00:00:00+02:00

Dit is ISO 8601-datum (toegevoegd in PHP 5) die MySQL gebruikt

Bewerken

MySQL 5.7 staat standaard geen tijdzone in de datetime toe. U kunt de fout uitschakelen met SQL_MODE=ALLOW_INVALID_DATES. Bekijk hier het antwoord voor meer details: https://stackoverflow.com/a/35944059/2103434. Maar dat betekent ook dat de tijdzone verloren gaat bij het opslaan in de database!

Standaard gebruikt MySQL de tijdzone van het systeem, en zolang PHP dezelfde tijdzone gebruikt, zou het goed moeten komen. In mijn geval CET / UTC+2.

Dat betekent dat als ik 2015-07-27T00:00:00+02:00 in de database invoeg, alleen 2015-07-27T00:00:00 wordt opgeslagen (maar dat is de juiste lokale tijd!).

Als ik de tijd weer in PHP laad,

$importedDate = new \DateTime('2015-07-27T00:00:00')

het neemt automatisch aan dat het de tijdzone +02:00 is, aangezien dit de standaardtijd is. Dit afdrukken zal weer correct zijn:

echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00

Gebruik voor de zekerheid altijd UTC op de server, specificeer het in MySQL en PHP, en converteer het dan alleen naar de landinstelling van uw gebruiker wanneer de datum wordt weergegeven:

date_default_timezone_set('UTC');
$importedDate = new \DateTime('2015-07-27T00:00:00+02:00');
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00
$importedDate->setTimezone(new \DateTimeZone("America/New_York"));
echo $importedDate->format('c');
// 2015-07-26T18:00:00-04:00

Antwoord 9

MySQL-functie now() retourneert de huidige tijdstempel. De enige manier die ik voor PHP heb gevonden, is door de volgende code te gebruiken.

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

Antwoord 10

Gebruik strftime:

strftime("%F %T");
  • %F is hetzelfde als %Y-%m-%d.

  • %T is hetzelfde als %H:%M:%S.

Hier is een demo op ideone.


Antwoord 11

Of je kunt DateTime constanten gebruiken:

echo date(DateTime::W3C); // 2005-08-15T15:52:01+00:00

Hier is de lijst van hen:

ATOM = "Y-m-d\TH:i:sP" ;               // -> 2005-08-15T15:52:01+00:00
COOKIE = "l, d-M-Y H:i:s T" ;          // -> Monday, 15-Aug-2005 15:52:01 UTC
ISO8601 = "Y-m-d\TH:i:sO" ;            // -> 2005-08-15T15:52:01+0000
RFC822 = "D, d M y H:i:s O" ;          // -> Mon, 15 Aug 05 15:52:01 +0000
RFC850 = "l, d-M-y H:i:s T" ;          // -> Monday, 15-Aug-05 15:52:01 UTC
RFC1036 = "D, d M y H:i:s O" ;         // -> Mon, 15 Aug 05 15:52:01 +0000
RFC1123 = "D, d M Y H:i:s O" ;         // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC2822 = "D, d M Y H:i:s O" ;         // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC3339 = "Y-m-d\TH:i:sP" ;            // -> 2005-08-15T15:52:01+00:00 ( == ATOM)
RFC3339_EXTENDED = "Y-m-d\TH:i:s.vP" ; // -> 2005-08-15T15:52:01.000+00:00
RSS = "D, d M Y H:i:s O" ;             // -> Mon, 15 Aug 2005 15:52:01 +0000
W3C = "Y-m-d\TH:i:sP" ;                // -> 2005-08-15T15:52:01+00:00

Voor debuggen heb ik echter liever een kortere (3v4l.org):

echo date('ymd\THisP'); // 180614T120708+02:00

Antwoord 12

Ik vind de oplossing die door gebruiker 1786647 is gepost leuk, en ik heb deze een beetje bijgewerkt om de tijdzone te wijzigen in een functieargument en optionele ondersteuning toe te voegen voor het doorgeven van een Unix-tijd- of datetime-tekenreeks om te gebruiken voor de geretourneerde datumstempel.

Het bevat ook een fallback voor “setTimestamp” voor gebruikers met een versie lager dan PHP 5.3:

function DateStamp($strDateTime = null, $strTimeZone = "Europe/London") {
    $objTimeZone = new DateTimeZone($strTimeZone);
    $objDateTime = new DateTime();
    $objDateTime->setTimezone($objTimeZone);
    if (!empty($strDateTime)) {
        $fltUnixTime = (is_string($strDateTime)) ? strtotime($strDateTime) : $strDateTime;
        if (method_exists($objDateTime, "setTimestamp")) {
            $objDateTime->setTimestamp($fltUnixTime);
        }
        else {
            $arrDate = getdate($fltUnixTime);
            $objDateTime->setDate($arrDate['year'], $arrDate['mon'], $arrDate['mday']);
            $objDateTime->setTime($arrDate['hours'], $arrDate['minutes'], $arrDate['seconds']);
        }
    }
    return $objDateTime->format("Y-m-d H:i:s");
}

Antwoord 13

Je kunt de PHP-datumfunctie gebruiken met het juiste formaat als parameter,

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

Antwoord 14

Mijn antwoord is overbodig, maar als je OCS bent, visueel ingesteld en je dit nu zoekwoord in je code moet zien, gebruik dan:

date( 'Y-m-d H:i:s', strtotime( 'now' ) );

Antwoord 15

Er is geen ingebouwde PHP now()-functie, maar u kunt dit doen met date().

Voorbeeld

function now() {
    return date('Y-m-d H:i:s');
}

Je kunt date_default_timezone_set() gebruiken als je de tijdzone wilt wijzigen.

Anders kunt u gebruik maken van Carbon – Een eenvoudige PHP API-extensie voor DateTime.


Antwoord 16

In PHP is het logische equivalent van de MySQL-functie now() time().

Maar time() retourneert een Unix-tijdstempel dat verschilt van een MySQL DATETIME.

Dus je moet de Unix-tijdstempel die is geretourneerd door time() converteren naar de MySQL-indeling.

Je doet het met:
date(“J-m-d H:i:s”);

Maar waar is time() in de date()-functie? Het is de tweede parameter: eigenlijk zou je to date() een tijdstempel moeten geven als tweede parameter, maar als deze wordt weggelaten, wordt deze standaard ingesteld op time().

Dit is het meest complete antwoord dat ik me kan voorstellen.

Gegroet.


Antwoord 17

binnenkort

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

php advanced now class extra addMinute addYear als zodanig addHour etc …

<?php /** @noinspection PhpUnhandledExceptionInspection */
/**
 * Class Now
 * @author  d?lo surucu <[email protected]>
 */
class Now
{
    /**
     * @var DateTime
     */
    private $dateTime;
    /**
     * Now constructor.
     * @throws Exception
     */
    public function __construct()
    {
        $this->dateTime = new DateTime('now');
    }
    /**
     * @param int $year
     * @return Now
     * @throws Exception
     * @noinspection PhpUnused
     */
    public function addYear(int $year): self
    {
        $this->dateTime->add(new DateInterval('P' . $year . 'Y'));
        return $this;
    }
    /**
     * @noinspection PhpUnused
     * @param int $month
     * @return Now
     * @throws Exception
     * @noinspection PhpUnused
     */
    public function addMonth(int $month):self 
    {
        $this->dateTime->add(new DateInterval('P' . $month . 'M'));
        return $this;
    }
    /**
     * @param int $day
     * @return $this
     * @throws Exception
     */
    public function addDay(int $day): self
    {
        $this->dateTime->add(new DateInterval('P' . $day . 'D'));
        return $this;
    }
    /**
     * @noinspection PhpUnused
     * @param int $week
     * @return $this
     * @throws Exception
     */
    public function addWeek(int $week): self
    {
        return $this->addDay($week * 7);
    }
    /**
     * @noinspection PhpUnused
     * @param int $second
     * @return $this
     * @throws Exception
     */
    public function addSecond(int $second): self
    {
        $this->dateTime->add(new DateInterval('PT' . $second . 'S'));
        return $this;
    }
    /**
     * @param int $minute
     * @return $this
     * @throws Exception
     */
    public function addMinute(int $minute): self
    {
        $this->dateTime->add(new DateInterval('PT' . $minute . 'M'));
        return $this;
    }
    /**
     * @param int $hour
     * @return $this
     * @throws Exception
     */
    public function addHour(int $hour): self
    {
        $this->dateTime->add(new DateInterval('PT' . $hour . 'H'));
        return $this;
    }
    /**
     * @return string
     */
    public function get(): string
    {
        return $this->dateTime->format('Y-m-d H:i:s');
    }
    /**
     * @return string
     */
    public function __toString()
    {
        return $this->get();
    }
}
/**
 * @return Now
 * @throws Exception
 */
function now()
{
    return new Now();
}

met

  echo now(); //2020-03-10 22:10
echo now()->addDay(1); //2020-03-11 22:10
echo now()->addDay(1)->addHour(1); // //2020-03-11 23:10
echo now()->addDay(1)->addHour(1)->addMinute(30); // //2020-03-11 23:40
echo now()->addDay(1)->addHour(1)->addMinute(30)->addSecond(10); // //2020-03-11 23:50
//or u can use get method for example
echo now()->addDay(1)->addHour(1)->addMinute(30)->get(); // //2020-03-11 23:40

Antwoord 18

Als je nu tijd wilt hebben, inclusief AM / PM

<?php 
    $time_now = date("Y-m-d h:i:s a");
    echo $time_now;
?>

Het geeft 2020-05-01 05:45:28 PM

of

<?php 
    $time_now = date("Y-m-d h:i:s a");
    echo $time_now;
?>

Het geeft 2020-05-01 05:45:28 PM


Antwoord 19

Misschien vind je dit nuttig

new \DateTime()

Antwoord 20

Het PHP-equivalent is time(): http: //php.net/manual/en/function.time.php

LEAVE A REPLY

Please enter your comment!
Please enter your name here

10 + nineteen =

Other episodes