downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

DateTime::createFromFormat> <DateTime::add
[edit] Last updated: Fri, 17 May 2013

view this page in

DateTime::__construct

date_create

(PHP 5 >= 5.2.0)

DateTime::__construct -- date_createReturns new DateTime object

Descrierea

Stil obiect-orientat

public DateTime::__construct() ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Stil procedural

DateTime date_create ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Returns new DateTime object.

Parametri

time

Un șir dată/oră. Formatele valide sunt explicate în Formatele datelor și orelor.

Enter NULL here to obtain the current time when using the $timezone parameter.

timezone

A DateTimeZone object representing the timezone of $time.

If $timezone is omitted, the current timezone will be used.

Notă:

The $timezone parameter and the current timezone are ignored when the $time parameter either is a UNIX timestamp (e.g. @946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).

Valorile întoarse

Returns a new DateTime instance. Stil procedural întoarce FALSE în caz de eșec.

Erori/Excepții

Emits Exception in case of an error.

Istoria schimbărilor

Versiunea Descriere
5.3.0 If an invalid date is specified, then an exception is now thrown. Previously an error was emitted.

Exemple

Example #1 DateTime::__construct() example

Stil obiect-orientat

<?php
try {
    
$date = new DateTime('2000-01-01');
} catch (
Exception $e) {
    echo 
$e->getMessage();
    exit(
1);
}

echo 
$date->format('Y-m-d');
?>

Stil procedural

<?php
$date 
date_create('2000-01-01');
if (!
$date) {
    
$e date_get_last_errors();
    foreach (
$e['errors'] as $error) {
        echo 
"$error\n";
    }
    exit(
1);
}

echo 
date_format($date'Y-m-d');
?>

Exemplele de mai sus vor afișa:

2000-01-01

Example #2 Intricacies of DateTime::__construct()

<?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";
?>

Exemplul de mai sus va afișa ceva similar cu:

2000-01-01 00:00:00-05:00
2000-01-01 00:00:00+12:00
2010-04-24 10:24:16-04:00
2010-04-25 02:24:16+12:00
2000-01-01 00:00:00+00:00
2000-03-01 00:00:00-05:00

Vedeți de asemenea



DateTime::createFromFormat> <DateTime::add
[edit] Last updated: Fri, 17 May 2013
 
add a note add a note User Contributed Notes DateTime::__construct - [6 notes]
up
2
kendsnyder at gmail dot com
3 years ago
The theoretical limits of the date range seem to be "-9999-01-01" through "9999-12-31" (PHP 5.2.9 on Windows Vista 64):

<?php

$d
= new DateTime("9999-12-31");
$d->format("Y-m-d"); // "9999-12-31"

$d = new DateTime("0000-12-31");
$d->format("Y-m-d"); // "0000-12-31"

$d = new DateTime("-9999-12-31");
$d->format("Y-m-d"); // "-9999-12-31"

?>

Dates above 10000 and below -10000 do not throw errors but produce weird results:

<?php

$d
= new DateTime("10019-01-01");
$d->format("Y-m-d"); // "2009-01-01"

$d = new DateTime("10009-01-01");
$d->format("Y-m-d"); // "2009-01-01"

$d = new DateTime("-10019-01-01");
$d->format("Y-m-d"); // "2009-01-01"

?>
up
1
Tim Strehle
3 years ago
"The $timezone parameter and the current timezone are ignored when the $time parameter […] is a UNIX timestamp."

Watch out – this means that these two are NOT equivalent, they result in different timezones (unless your current timezone is GMT):

<?php
$d
= new DateTime(); $d->setTimestamp($t);
echo
$o->format('O');
// +0200

$d = new DateTime('@' . $t);
echo
$o->format('O');
// +0000
?>
up
4
joel dot kallman at gmail dot com
2 years ago
A definite "gotcha" (while documented) that exists in the __construct is that it ignores your timezone if the $time is a timestamp.  While this may not make sense, the object does provide you with methods to work around it.

<?php
// New Timezone Object
$timezone = new DateTimeZone('America/New_York');

// New DateTime Object
$date =  new DateTime('@1306123200', $timezone);   

// You would expect the date to be 2011-05-23 00:00:00
// But it actually outputs 2011-05-23 04:00:00
echo $date->format('Y-m-d H:i:s');

// You can still set the timezone though like so...       
$date->setTimezone($timezone);

// This will now output 2011-05-23 00:00:00
echo $date->format('Y-m-d H:i:s');
?>
up
2
kendsnyder at gmail dot com
3 years ago
Also forgot to mention, that MySQL "zeroed" dates do not throw an error but produce a non-sensical date:

<?php

$d
= new DateTime("0000-00-00");
$d->format("Y-m-d"); // "-0001-11-30"

?>

Another good reason to write your own class that extends from DateTime.
up
1
cHao
1 year ago
There's a reason for ignoring the time zone when you pass a timestamp to __construct.  That is, UNIX timestamps are by definition based on UTC.  @1234567890 represents the same date/time regardless of time zone.  So there's no need for a time zone at all.
up
-1
sebi at timewaster dot de
1 year ago
Note that although a milliseconds portion in ISO8601 timestamps is legal, PHP cannot parse them and will throw an exception. No parser in PHP can parse it.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites