get the ISO 8601 with seconds.decimal-fraction-of-second date in php?

前端 未结 5 1013
遇见更好的自我
遇见更好的自我 2020-12-16 19:26

I echo this :

  php> echo date(\"Y-m-d\\TH:i:s\");
      2011-05-27T11:21:23

How can do with date function to get this date format:

相关标签:
5条回答
  • 2020-12-16 19:31

    As a solution for 2020 with the DateTime class, which was added in PHP 5.2, you can do a simple one liner to get the wanted format.

    For example:

    echo (new DateTime())->format('Y-m-d\TH:i:s.uP');
    // 2020-04-23T09:18:25.311075+02:00
    

    The DateTimeInterface, which is implemented by the DateTime class, brings its own constants for widely used date formats. If you know the format, you can use a constant for that.

    echo var_dump($datetime->format(DateTime::RFC3339_EXTENDED));
    // 2020-04-23T09:18:25.311+02:00
    

    As object orientated programming is widely spread in the PHP world, this could be a possible solution, too.

    0 讨论(0)
  • 2020-12-16 19:33
    date('Y-m-d\TH:i:s.uP')
    

    u for microseconds was added in PHP 5.2.2. For earlier or (still) broken versions (see comments):

    date('Y-m-d\TH:i:s') . substr(microtime(), 1, 8) . date('P')
    

    Or, to avoid two calls to date:

    date(sprintf('Y-m-d\TH:i:s%sP', substr(microtime(), 1, 8)))
    
    0 讨论(0)
  • 2020-12-16 19:35

    If parsing the string returned by microtime makes you vomit in your mouth, and you don't want multiple distinct timestamps munged together into your output, you can do this:

    $unow = microtime(true);
    sprintf("%s.%06d%s", date("Y-m-d\TH:i:s", $unow), ($unow - floor($unow))*1e6, date("P", $unow));
    
    0 讨论(0)
  • 2020-12-16 19:36

    By doing separate [date] calls you have a small chance of two time stamps being out of order: eg call date at 1:29:22.999999 and mircotime at 1:29:23.000001. On my server consecutive calls are about 10 us apart.

    Source

    Try this instead:

    list($usec, $sec) = explode(" ", microtime());
    echo date("Y-m-d\TH:i:s", $sec) . substr($usec, 1, 8) . date("P", $sec);
    

    E.g.:

    2015-07-19T16:59:16.0113674-07:00
    
    0 讨论(0)
  • 2020-12-16 19:55

    Best performance:

    substr_replace(date('c'), substr(microtime(), 1, 8), 19, 0);
    
    0 讨论(0)
提交回复
热议问题