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

search for in the

DateTime::createFromFormat> <DateTime::add
[edit] Last updated: Fri, 23 Mar 2012

view this page in

DateTime::__construct

date_create

(PHP 5 >= 5.2.0)

DateTime::__construct -- date_createReturns new DateTime object

Opis

Styl obiektowy

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

Styl proceduralny

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

Returns new DateTime object.

Parametry

time

Łańcuch daty/czasu. Prawidłowe formaty są wyjaśnione pod adresem Formaty daty i czasu.

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

timezone

A DateTimeZone object representing the desired time zone.

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

Informacja:

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).

Zwracane wartości

Returns a new DateTime instance. Styl proceduralny zwraca FALSE w przypadku niepowodzenia.

Błędy/Wyjątki

Emits Exception in case of an error.

Rejestr zmian

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

Przykłady

Przykład #1 DateTime::__construct() example

Styl obiektowy

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

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

Styl proceduralny

<?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');
?>

Powyższe przykłady wyświetlą:

2000-01-01

Przykład #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";
?>

Powyższy przykład wyświetli coś podobnego do:

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

Zobacz też:



DateTime::createFromFormat> <DateTime::add
[edit] Last updated: Fri, 23 Mar 2012
 
add a note add a note User Contributed Notes DateTime::__construct
sebi at timewaster dot de 24-Feb-2012 01:50
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.
cHao 22-Dec-2011 07:17
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.
joel dot kallman at gmail dot com 23-May-2011 06:14
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');
?>
Tim Strehle 05-May-2010 03:50
"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
?>
kendsnyder at gmail dot com 12-Jan-2010 08:37
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.
kendsnyder at gmail dot com 12-Jan-2010 08:24
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"

?>

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