PHP'de UTC saati alın


122

PHP'nin date () işlevini kullanarak UTC / GMT +/- zaman damgasını nasıl alabilirim? Örneğin, denersem

date("Y-m-d H:i:s", time()); 

Unix zaman damgası alacağım; ancak yerel zamanlamalara göre GMT / UTC +/- 0400 veya GMT / UTC +/- 1000 dizeli UTC / GMT zaman damgasını almam gerekiyor.


1
@JeffPuckettII GMT, gün ışığından yararlanma için değişmez. İngiltere, Yaz aylarında GMT'den BST'ye değişir, ancak GMT aynı kalır ve her zaman UTC ile eşleşir.
— lewis

Yanıtlar:


111

Kullanmak gmdateher zaman bir GMT tarihi döndürür. Sözdizimi ile aynıdır date.


12
@sanmai: Unix zaman damgası tanımı gereği her zaman UTC'dir. en.wikipedia.org/wiki/Unix_time
— nikc.org

1
@ nikc.org: Sorun, gmdate ("U"), sunucu sistem saat diliminiz farklıysa UTC zaman damgası olmayan time () ile aynı döndürmesidir. Gerçek UTC tabanlı zaman damgası alabilmemin tek yolu strtotime (gmdate ("M d YH: i: s")) idi, bu da sunucu sisteminizin saat diliminiz UTC'den farklı olduğunda gmdate'den ("U") farklıdır
— bksi

@bksi Açıkladığın davranışı tekrarlayamıyorum. (Makinem GMT'de değil ve UNIX zaman damgalarım da doğru gmdate("U") == time().) Olası hatalı davranış gibi görünüyor. PHP projesini iki kez kontrol edin ve bir hatayı dosyalayın.
— nikc.org

Senaryoyu test etmek için basit php betiği kullandım: <? echo time (). "===" .strtotime (gmdate ("M d YH: i: s")). "Zaman Dilimi:" .tarih ("Z"). "\ n"; ?> Çalıştırdığımda şu sonucu alıyorum: 1456342082 === 1456338482 Saat dilimi: 3600 Shell komut tarihinin sonucu: 24 Şubat Çarşamba 20:28:11 CET 2016
— bksi

1
@bksi - Belki de datetime'ın dahili temsilini datetime'ın harici gösterimiyle karıştırıyorsunuzdur? bölge belirleyicisiz saat vs bir bölge belirleyicili saat? Nikc'in (ve belgelerin) dediği gibi, time()"Unix Epoch'tan ( 1 Ocak 1970 00:00:00 GMT) bu yana geçen saniye sayısını" döndürür. Not GMT. Varsayılan olarak sisteminizin bunu görüntüleme için saat diliminize dönüştürmesi bir kullanıcı rahatlığıdır. Dahili olarak, her zaman GMT'dir.
— ToolmakerSteve


47

Daha önce burada yanıtlandığı gibi , PHP 5.2.0'dan beri DateTimesınıfı kullanabilir ve UTC saat dilimini bir örneği ile belirtebilirsiniz DateTimeZone.

DateTime __construct () belgeleri , bir DateTime örneği oluştururken ve geçerli saati almak için bir saat dilimi belirtirken "now" ın ilk parametre olarak geçirilmesini önerir.

$date_utc = new \DateTime("now", new \DateTimeZone("UTC"));

echo $date_utc->format(\DateTime::RFC850); # Saturday, 18-Apr-15 03:23:46 UTC

3
DateTime __construct () belgeleri artık geçerli saati almak için ilk parametrenin çıkarılmasını önermiyor. Şimdi bir 'şimdi' dizesi kullanmanız gerektiğini söylüyor.
— PaulSkinner

Teşekkürler @ PaulSkinner, cevabı değiştirdim.
— Jessedc

Teşekkürler, önceki ters eğik çizgilerin amacı DateTimenedir? Kendim çalıştırıyorum, onlar olmadan gayet iyi çalışıyor gibi görünüyor.
— Kar

1
Bu kod isim alanlı koduna eklenir Eğer senin dosyası vardır diyelim @Snow namespace Aüstündeki beyanı PHP üstlenecek DateTimebaşvurmak için A\DateTimeyanlış olan. Ters eğik çizgi eklemek sorunu çözer. Henüz ad alanlarını kullanmasanız bile almak iyi bir alışkanlık bence.
— Niavlys

35
$time = time();
$check = $time+date("Z",$time);
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $check);

3
@AlainTiemblo pek değil; Çalışması için ofseti çıkarmanız gerekiyor
— sanmai


14

UTC tarihinin alınması

gmdate("Y-m-d H:i:s");

UTC zaman damgası alma

time();

date_default_timezone_setKodunuz olsa bile sonuç farklı olmayacaktır .


@ زياد Düzeltme için teşekkürler, cevabımı değiştirdim
— StefansArya

Gmdate () işlevinin UTC'yi değil GMT'yi döndürdüğünü düşündüm. "Döndürülen saatin Greenwich Ortalama Saati (GMT) olması dışında date () işleviyle aynıdır". Bir şey mi kaçırıyorum? Bunlar eşdeğer mi çıkıyor?
— Ürdün

3
@Jordan Pratikte UTC ve GMT aynı zamanı temsil eder. stackoverflow.com/questions/48942916/…
— martti

12

Aramadan başka gmdatebu kodu kodun geri kalanının önüne de koyabilirsiniz:

<?php
date_default_timezone_set("UTC");
?>

Bu, tarih / saatle ilgili geri kalan çağrılarınızın GMT / UTC saat dilimini kullanmasını sağlayacaktır.


Artık PHP'nin son sürümlerinde değil.
— Khom Nazid

1
@KhomNazid "UTC" bir parametre olarak hala geçerlidir. php.net/manual/en/…
— Harikrishna

6

Geçerli UTC zaman damgasını elde etmek için gmmktime işlevini bağımsız değişkenler olmadan kullanabilirsiniz :

$time = gmmktime();
echo date("Y-m-d H:i:s", $time); 

gmmktime yalnızca sunucu saatiniz UTC kullanılıyorsa çalışır. Örneğin, sunucum ABD / Pasifik olarak ayarlandı. yukarıda listelenen işlev, Pasifik saatini geri yansıtır.


gmmktime () kullanımdan kaldırıldı
— Jonny

2

yerel zamanlamalara göre GMT / UTC +/- 0400 veya GMT / UTC +/- 1000 dizisi ile

Size yerel saatten saat dilimi farklarını vermek için özel biçiminiz eksik O.

Saat cinsinden Greenwich zamanı (GMT) farkı Örnek: +0200

date_default_timezone_set('America/La_Paz');
echo date('Y-m-d H:i:s O');

2018-01-12 12:10:11 -0400

Bununla birlikte, maksimum taşınabilirlik / birlikte çalışabilirlik için ISO8601 tarih biçimini kullanmanızı tavsiye ederim.c

date_default_timezone_set('America/La_Paz');
echo date('c');

2018-01-12T12: 10: 11-04: 00

date_default_timezone_set('Australia/Brisbane');
echo date('c');

2018-01-13T02: 10: 11 + 10: 00

Ayrıca kullanabilirsiniz gmdateve saat dilimi uzaklığı dizesi her zaman+00:00

date_default_timezone_set('America/La_Paz');
echo gmdate('c');

2018-01-12T16: 10: 11 + 00: 00

date_default_timezone_set('Australia/Brisbane');
echo gmdate('c');

2018-01-12T16: 10: 11 + 00: 00


1

UTC saatini almak için aşağıdakileri kullanabilirsiniz:

date_default_timezone_set('Asia/Calcutta');

$current_date = date("Y/m/d g:i A");

$ist_date = DateTime::createFromFormat(
                        '"Y/m/d g:i A"',
                        $current_date,
                        new DateTimeZone('Asia/Calcutta')
                    );

$utc_date = clone $ist_date;
$utc_date->setTimeZone(new DateTimeZone('UTC'));

echo 'UTC:  ' . $utc_date->format('Y-m-d g:i A');

0
/**
     * Converts a local Unix timestamp to GMT
     *
     * @param   int Unix timestamp
     * @return  int
     */
    function local_to_gmt($time = '')
    {
        if ($time === '')
        {
            $time = time();
        }

        return mktime(
            gmdate('G', $time),
            gmdate('i', $time),
            gmdate('s', $time),
            gmdate('n', $time),
            gmdate('j', $time),
            gmdate('Y', $time)
        );
    }

0

Geçerli UTC (Koordineli Evrensel Zaman) saatini almak için PHP kodunu aşağıda bulabilirsiniz

<?php
// Prints the day
echo gmdate("l") . "<br>";

// Prints the day, date, month, year, time, AM or PM
echo gmdate("l jS \of F Y h:i:s A");
?>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.