cari

Rumah  >  Soal Jawab  >  teks badan

PHP DateTime boleh menggabungkan tarikh dan masa.

<p>Bagaimana untuk menggabungkan tarikh dan masa bersama-sama menggunakan format lajur 'masa' MySQL dalam PHP? </p> <pre class="brush:php;toolbar:false;">$date = New DateTime(); $masa = $rekod->masa //14:00:00</pra> <p>Lakukan ini</p> <pre class="brush:php;toolbar:false;">$date = New DateTime(); $date->setTime(explode(':',$record->time)[0],explode(':',$record->time)[1],explode(':',$record- >masa)[2]);</pre> <p>Tiada cara yang lebih baik</p>
P粉178894235P粉178894235513 hari yang lalu567

membalas semua(1)saya akan balas

  • P粉530519234

    P粉5305192342023-08-01 09:41:04

    Saya secara peribadi lebih suka menggunakan objek peringkat tinggi dan bukannya tatasusunan atau rentetan sahaja, jadi beginilah cara saya mendekatinya. Ini mungkin berlebihan bagi sesetengah orang, yang saya faham sepenuhnya, tetapi kaedah teras juga boleh ditulis semula dengan mudah sebagai fungsi global, jadi mudah-mudahan ini boleh diambil kira.

    Saya rasa secara keseluruhannya ia sangat mudah dan mudah, hampir sama dengan kod anda, kecuali selepas membelah kami menukarnya kepada integer dan kemudian mengesahkan bahawa jam itu berada dalam julat yang dijangkakan.

    readonly class MySqlTime
    {
        public function __construct(
            public int $hours,
            public int $minutes,
            public int $seconds,
        ) {
        }
    
        public static function fromMySqlTimeAsDurationInDay(string $time): self
        {
            [$hours, $minutes, $seconds] = array_map('intval', explode(':', $time));
    
            // Ensure only positive values on a single day.
            // MySql should already be throwing errors about minutes or seconds being out of range, so we don't
            // need to check those.
            // The seconds could include decimals, however for this purpose we are ignoring them.
            if ($hours > 23 || $hours < 0) {
                throw new InvalidArgumentException('Hours must be between 0 and 23');
            }
    
            return new self($hours, $minutes, $seconds);
        }
    
        public function toDateTime(DateTimeInterface $dateTime = null) : DateTimeInterface
        {
            $dateTime ??= new DateTimeImmutable();
    
            return $dateTime->setTime($this->hours, $this->minutes, $this->seconds);
        }
    }

    Penggunaan:

    var_dump(MySqlTime::fromMySqlTimeAsDurationInDay('12:34:56')->toDateTime());
    

    Keluaran:

    object(DateTimeImmutable)#3 (3) {
      ["date"]=>
      string(26) "2023-07-31 12:34:56.000000"
      ["timezone_type"]=>
      int(3)
      ["timezone"]=>
      string(16) "Europe/Amsterdam"
    }

    Demo: https://3v4l.org/B6mr4#v8.2.7

    balas
    0
  • Batalbalas