2011-05-27 24 views
9

Bunu yankı:ISO 8601’i php’de saniye cinsinden saniye-kesirli saniye tarihine sahip olsun?

php> echo date("Y-m-d\TH:i:s"); 
     2011-05-27T11:21:23 

tarih fonksiyonu ile yapabileceğiniz bu tarih biçimini almak için:

2011-01-12T14:41:35.7042252+01:00

35.7042252 => seconds.decimal-kesir-of-saniye (örneğin)

denedim:

php> function getTimestamp() 
... { 
...   return date("Y-m-d\TH:i:s") . substr((string)microtime(), 1, 8); 
... } 

php> echo getTimestamp(); 
2011-05-27T15:34:35.6688370 // missing +01:00 how can I do? 

cevap

9
PHP 5.2.2'de microseconds için

u eklenmiştir. Daha önce ya da (hala) kırık sürümleri (yorum görmek) için:

date('Y-m-d\TH:i:s') . substr(microtime(), 1, 8) . date('P') 

Veya, date iki çağrı önlemek için:

date(sprintf('Y-m-d\TH:i:s%sP', substr(microtime(), 1, 8))) 
+0

şimdi çalışıyor, teşekkür – newbie

+0

evet ama tarihi ('Ymd \ TH: i: s.uP') bir hata yankı tarihine sahip ('Ymd \ TH: i: s.uP'); => 2011 -05-27T15: 55: 31.000000 + 02: 00 – newbie

+0

Aptal PHP. O zaman mikrotübe git. :) – deceze

3

En iyi performans: yaparak

substr_replace(date('c'), substr(microtime(), 1, 8), 19, 0); 
4

Ayrı [tarih] çağrıları, iki zaman damgasının küçük bir şansının olmadığı anlamına gelir: örneğin, 1: 29: 22.999999 ve 1: 29: 23.000001 numaralı telefonlarda arama tarihi. Sunucumda ardışık çağrılar yaklaşık 10 kişidir.

Source

yerine bu deneyin:

list($usec, $sec) = explode(" ", microtime()); 
echo date("Y-m-d\TH:i:s", $sec) . substr($usec, 1, 8) . date("P", $sec); 

Örn:

2015-07-19T16:59:16.0113674-07:00 
+0

'source' linki, hataları içeren Şans'ın kodunu referans alır. Düzeltmeler için bu cevaba bakın :) http://stackoverflow.com/a/38334226/614616 – hozza

-1

microtime tarafından döndürülen dize ayrıştırma ağzınızda kusma yapar ve Bunu yapmazsanız Çıktınıza birlikte çok sayıda ayrı zaman damgası yerleştirmek isteyebilirsiniz, bunu yapabilirsiniz:

$unow = microtime(true); 
sprintf("%s.%06d%s", date("Y-m-d\TH:i:s", $unow), ($unow - floor($unow))*1e6, date("P", $unow)); 
+0

Bu, microtime() 'nin 0.1'den daha az olduğu zaman soldaki gibi olmadığı zamanın yaklaşık% 10'u başarısız olur. -dolgu malzemesi. Örneğin. .0272390', .272390' olarak görüntülenecektir. – jchavannes

+0

Tam olarak bir "başarısızlık" değil, ama evet. Düzeltmek için düzenlenmiş, önemsiz. – jab

İlgili konular