Вход Регистрация
Файл: vendor/nette/utils/src/Utils/DateTime.php
Строк: 133
<?php

/**
 * This file is part of the Nette Framework (https://nette.org)
 * Copyright (c) 2004 David Grudl (https://davidgrudl.com)
 */

declare(strict_types=1);

namespace 
NetteUtils;

use 
Nette;


/**
 * DateTime.
 */
class DateTime extends DateTime implements JsonSerializable
{
    use 
NetteSmartObject;

    
/** minute in seconds */
    
public const MINUTE 60;

    
/** hour in seconds */
    
public const HOUR 60 self::MINUTE;

    
/** day in seconds */
    
public const DAY 24 self::HOUR;

    
/** week in seconds */
    
public const WEEK self::DAY;

    
/** average month in seconds */
    
public const MONTH 2_629_800;

    
/** average year in seconds */
    
public const YEAR 31_557_600;


    
/**
     * Creates a DateTime object from a string, UNIX timestamp, or other DateTimeInterface object.
     * @throws Exception if the date and time are not valid.
     */
    
public static function from(string|int|DateTimeInterface|null $time): static
    {
        if (
$time instanceof DateTimeInterface) {
            return new static(
$time->format('Y-m-d H:i:s.u'), $time->getTimezone());

        } elseif (
is_numeric($time)) {
            if (
$time <= self::YEAR) {
                
$time += time();
            }

            return (new static)->
setTimestamp((int) $time);

        } else { 
// textual or null
            
return new static((string) $time);
        }
    }


    
/**
     * Creates DateTime object.
     * @throws NetteInvalidArgumentException if the date and time are not valid.
     */
    
public static function fromParts(
        
int $year,
        
int $month,
        
int $day,
        
int $hour 0,
        
int $minute 0,
        
float $second 0.0,
    ): static
    {
        
$s sprintf('%04d-%02d-%02d %02d:%02d:%02.5F'$year$month$day$hour$minute$second);
        if (
            !
checkdate($month$day$year)
            || 
$hour 0
            
|| $hour 23
            
|| $minute 0
            
|| $minute 59
            
|| $second 0
            
|| $second >= 60
        
) {
            throw new 
NetteInvalidArgumentException("Invalid date '$s'");
        }

        return new static(
$s);
    }


    
/**
     * Returns new DateTime object formatted according to the specified format.
     */
    
public static function createFromFormat(
        
string $format,
        
string $time,
        
string|DateTimeZone|null $timezone null,
    ): static|
false
    
{
        if (
$timezone === null) {
            
$timezone = new DateTimeZone(date_default_timezone_get());

        } elseif (
is_string($timezone)) {
            
$timezone = new DateTimeZone($timezone);
        }

        
$date parent::createFromFormat($format$time$timezone);
        return 
$date ? static::from($date) : false;
    }


    
/**
     * Returns JSON representation in ISO 8601 (used by JavaScript).
     */
    
public function jsonSerialize(): string
    
{
        return 
$this->format('c');
    }


    
/**
     * Returns the date and time in the format 'Y-m-d H:i:s'.
     */
    
public function __toString(): string
    
{
        return 
$this->format('Y-m-d H:i:s');
    }


    
/**
     * You'd better use: (clone $dt)->modify(...)
     */
    
public function modifyClone(string $modify ''): static
    {
        
$dolly = clone $this;
        return 
$modify $dolly->modify($modify) : $dolly;
    }
}
Онлайн: 1
Реклама