Antworten:
Probieren Sie getTimezone und setTimezone aus , siehe Beispiel
(Dies verwendet jedoch eine Klasse)
AKTUALISIEREN:
Ohne Unterricht könnten Sie so etwas ausprobieren:
$the_date = strtotime("2010-01-19 00:00:00");
echo(date_default_timezone_get() . "<br />");
echo(date("Y-d-mTG:i:sz",$the_date) . "<br />");
echo(date_default_timezone_set("UTC") . "<br />");
echo(date("Y-d-mTG:i:sz", $the_date) . "<br />");
HINWEIS: Möglicherweise müssen Sie auch die Zeitzone auf das Original zurücksetzen
Verwenden Sie strtotime , um einen Zeitstempel aus der angegebenen Zeichenfolge (interpretiert als Ortszeit) zu generieren, und verwenden Sie gmdate , um ihn als formatiertes UTC-Datum zurückzugewinnen.
Wie gewünscht, hier ein einfaches Beispiel:
echo gmdate('d.m.Y H:i', strtotime('2012-06-28 23:55'));
Verwenden von DateTime:
$given = new DateTime("2014-12-12 14:18:00");
echo $given->format("Y-m-d H:i:s e") . "\n"; // 2014-12-12 14:18:00 Asia/Bangkok
$given->setTimezone(new DateTimeZone("UTC"));
echo $given->format("Y-m-d H:i:s e") . "\n"; // 2014-12-12 07:18:00 UTC
Gehen Sie folgendermaßen vor:
gmdate('Y-m-d H:i:s', $timestamp)
oder einfach
gmdate('Y-m-d H:i:s')
um "JETZT" in UTC zu bekommen.
Überprüfen Sie die Referenz:
Wenn Sie ein Datum in diesem Format haben JJJJ-MM-HH TT: MM: SS, können Sie PHP tatsächlich austricksen, indem Sie am Ende Ihrer "Datums- / Uhrzeit-Zeichenfolge" eine UTC hinzufügen und diese mit strtotime konvertieren.
date_default_timezone_set('Europe/Stockholm');
print date('Y-m-d H:i:s',strtotime("2009-01-01 12:00"." UTC"))."\n";
print date('Y-m-d H:i:s',strtotime("2009-06-01 12:00"." UTC"))."\n";
Dies wird dies drucken:
2009-01-01 13:00:00
2009-06-01 14:00:00
Und wie Sie sehen, wird auch das Problem der Sommerzeit behoben.
Ein etwas seltsamer Weg, um es zu lösen .... :)
:D
Konvertieren Sie die lokale Zeitzonenzeichenfolge in eine UTC-Zeichenfolge.
zB neuseeländische Zeitzone
$datetime = "2016-02-01 00:00:01";
$given = new DateTime($datetime, new DateTimeZone("Pacific/Auckland"));
$given->setTimezone(new DateTimeZone("UTC"));
$output = $given->format("Y-m-d H:i:s");
echo ($output);
Da strtotime ein bestimmtes Eingabeformat erfordert, kann DateTime :: createFromFormat verwendet werden ( PHP 5.3+ ist erforderlich ).
// set timezone to user timezone
date_default_timezone_set($str_user_timezone);
// create date object using any given format
$date = DateTime::createFromFormat($str_user_dateformat, $str_user_datetime);
// convert given datetime to safe format for strtotime
$str_user_datetime = $date->format('Y-m-d H:i:s');
// convert to UTC
$str_UTC_datetime = gmdate($str_server_dateformat, strtotime($str_user_datetime));
// return timezone to server default
date_default_timezone_set($str_server_timezone);
Ich benutze manchmal diese Methode:
// It is not importnat what timezone your system is set to.
// Get the UTC offset in seconds:
$offset = date("Z");
// Then subtract if from your original timestamp:
$utc_time = date("Y-m-d H:i:s", strtotime($original_time." -".$offset." Seconds"));
Funktioniert alle MOST der Zeit.
Wenn es Ihnen nichts ausmacht, die DateTime- Klasse von PHP zu verwenden , die seit PHP 5.2.0 verfügbar ist, gibt es verschiedene Szenarien, die zu Ihrer Situation passen könnten:
Wenn Sie ein $givenDt
DateTime-Objekt haben, das Sie in UTC konvertieren möchten, wird es in UTC konvertiert:
$givenDt->setTimezone(new DateTimeZone('UTC'));
Wenn Sie das Original $givenDt
später benötigen , können Sie alternativ das angegebene DateTime-Objekt klonen, bevor Sie das geklonte Objekt konvertieren:
$utcDt = clone $givenDt;
$utcDt->setTimezone(new DateTimeZone('UTC'));
Wenn Sie beispielsweise nur eine datetime-Zeichenfolge haben, $givenStr = '2018-12-17 10:47:12'
erstellen Sie zuerst ein datetime-Objekt und konvertieren es dann. Beachten Sie, dass dies $givenStr
in der konfigurierten Zeitzone von PHP liegt.
$utcDt = (new DateTime($givenStr))->setTimezone(new DateTimeZone('UTC'));
Wenn sich die angegebene Datums- / Uhrzeitzeichenfolge in einer anderen Zeitzone als in Ihrer PHP-Konfiguration befindet, erstellen Sie das Datums- / Uhrzeitobjekt, indem Sie die richtige Zeitzone angeben (siehe Liste der von PHP unterstützten Zeitzonen ). In diesem Beispiel nehmen wir die lokale Zeitzone in Amsterdam an:
$givenDt = new DateTime($givenStr, new DateTimeZone('Europe/Amsterdam'));
$givenDt->setTimezone(new DateTimeZone('UTC'));
http://php.net/manual/en/function.strtotime.php oder wenn Sie stattdessen keine Zeichenfolge, sondern Zeitkomponenten verwenden müssen, dann http://us.php.net/manual/en/function.mktime. php
Mit PHP 5 oder höher können Sie die Funktion datetime :: format verwenden (siehe Dokumentation http://us.php.net/manual/en/datetime.format.php ).
echo strftime( '%e %B %Y' ,
date_create_from_format('Y-d-m G:i:s', '2012-04-05 11:55:21')->format('U')
); // 4 May 2012
Allzweck-Normalisierungsfunktion zum Formatieren eines Zeitstempels von einer Zeitzone zu einer anderen. Sehr nützlich zum Speichern von Datenzeitstempeln von Benutzern aus verschiedenen Zeitzonen in einer relationalen Datenbank. Für Datenbankvergleiche speichern Sie den Zeitstempel als UTC und verwenden Sie ihn mitgmdate('Y-m-d H:i:s')
/**
* Convert Datetime from any given olsonzone to other.
* @return datetime in user specified format
*/
function datetimeconv($datetime, $from, $to)
{
try {
if ($from['localeFormat'] != 'Y-m-d H:i:s') {
$datetime = DateTime::createFromFormat($from['localeFormat'], $datetime)->format('Y-m-d H:i:s');
}
$datetime = new DateTime($datetime, new DateTimeZone($from['olsonZone']));
$datetime->setTimeZone(new DateTimeZone($to['olsonZone']));
return $datetime->format($to['localeFormat']);
} catch (\Exception $e) {
return null;
}
}
Verwendung:
$from = ['localeFormat' => "d/m/Y H:i A", 'olsonZone' => 'Asia/Calcutta']; $to = ['localeFormat' => "Y-m-d H:i:s", 'olsonZone' => 'UTC']; datetimeconv("14/05/1986 10:45 PM", $from, $to); // returns "1986-05-14 17:15:00"
Alternativ können Sie dies versuchen:
<?php echo (new DateTime("now", new DateTimeZone('Asia/Singapore')))->format("Y-m-d H:i:s e"); ?>
Dies wird Folgendes ausgeben:
2017-10-25 17:13:20 Asien / Singapur
Sie können dies innerhalb des value-Attributs eines Texteingabefelds verwenden, wenn Sie nur ein schreibgeschütztes Datum anzeigen möchten.
Entfernen Sie das 'e', wenn Sie Ihre Region / Ihr Land nicht anzeigen möchten.
Führen Sie die folgenden Schritte aus, um die UTC-Zeit einer im lokalen System des Benutzers festgelegten Zeitzone abzurufen (dies ist erforderlich, damit Webanwendungen verschiedene Zeitzonen in UTC speichern können):
Javascript (clientseitig):
var dateVar = new Date();
var offset = dateVar.getTimezoneOffset();
//getTimezoneOffset - returns the timezone difference between UTC and Local Time
document.cookie = "offset="+offset;
PHP (serverseitig):
public function convert_utc_time($date)
{
$time_difference = isset($_COOKIE['offset'])?$_COOKIE['offset']:'';
if($time_difference != ''){
$time = strtotime($date);
$time = $time + ($time_difference*60); //minutes * 60 seconds
$date = date("Y-m-d H:i:s", $time);
} //on failure of js, default timezone is set as UTC below
return $date;
}
..
..
//in my function
$timezone = 'UTC';
$date = $this->convert_utc_time($post_date); //$post_date('Y-m-d H:i:s')
echo strtotime($date. ' '. $timezone)
Als Verbesserung von Phill Paffords Antwort (ich verstand sein 'Yd-mTG: i: sz' nicht und er schlug vor, die Zeitzone zurückzusetzen). Also schlage ich Folgendes vor (ich habe es kompliziert, indem ich das HMTL-Format in Klartext geändert habe ...):
<?php
header('content-type: text/plain;');
$my_timestamp = strtotime("2010-01-19 00:00:00");
// stores timezone
$my_timezone = date_default_timezone_get();
echo date(DATE_ATOM, $my_timestamp)."\t ($my_timezone date)\n";
// changes timezone
date_default_timezone_set("UTC");
echo date("Y-m-d\TH:i:s\Z", $my_timestamp)."\t\t (ISO8601 UTC date)\n";
echo date("Y-m-d H:i:s", $my_timestamp)."\t\t (your UTC date)\n";
// reverts change
date_default_timezone_set($my_timezone);
echo date(DATE_ATOM, $my_timestamp)."\t ($my_timezone date is back)\n";
?>
gmdate
anstatt die Standardzeitzone auf UTC zu ändern. Weilgmdate
automatisch UTC verwendet.