Otomatik olarak JavaScript veya PHP ile kullanıcının mevcut yerel zamanı algılamak

7 Cevap php

Ben çoğu zaman dilimleri arasında farklı bir kullanıcının actual yerel saatle bilgiye dayanan ya da etkilemiştir görüntülemek gerekir. Bir kullanıcının şimdiki zaman ve / veya saat dilimi almanın güvenilir bir yolu var mı?

Temel Konular:

  • Sunucu tarafı kodu web sitesi ana bilgisayar veya kullanıcının ISP dayanmaktadır
  • Istemci tarafında kod çok kolayca manipüle olan kullanıcının sistem saatini dayanmaktadır

Anahtar sorular:

  • Bir kullanıcının coğrafi konumunu saptamak için gerekli midir?
  • ISS zaman doğru bir rehber olabilir mi?
  • Kullanıcılar OS saatler değişebilir veya kullanıcılar tarafından değiştirilebilir?

Örnekler:

Countdown:

Sadece 1 saat, 3 dakika, 56 saniye gitmek!

Sayı: Neye dayanarak gitmek saniye; Kullanıcının işletim sistemi saat, ana sunucu saati (artı veya eksi offset), ISS sistem zamanı. Saat tüm zaman dilimleri için aynı zamanda tamamlanır, ancak yanıltıcıdır eğer bu kolay da) kullanıcının yerel saat diliminde gece yarısı gibi bir şey için bir geri sayım ise

Edit log

Madde (10 saniye önce) 03:03 'da yayınlanmıştır

Sayı: "10 saniye" ne olursa olsun kullanıcı hesaplanır, zaman kullanıcının saat dilimini maç ayarlanır.

Opening times:

Bu restoran gece yarısı (AEST) kadar açıktır.

Sayı: Böyle gece yarısı gibi bir süre verilmesi sunucu tarafında mahsup ancak şimdi psudo kez kullanılarak hesaplanabilir, 2 saat içinde kullanıcının zaman dayanmaktadır.

PHP: ile time() sunucu zaman verir. Bu kullanıcının zaman dilimine bağlı olarak telafi edilebilir.

JavaScript: ile Date() çok kolayca manipüle olan kullanıcının bilgisayar saati ile çıktılar.

7 Cevap

Kısacası hayır.

Sunucu tarafı zaman kullanarak önermek ve onların zaman dilimini seçmek için kullanıcı için yeteneği var olacaktır.

Sen muhtemelen kendi IP adresi etrafında tahminlere dayalı kullanıcıları için varsayılan zaman dilimleri hesaplamak olabilir, ancak bu hata açıktır.

Sen javascript / Ajax ile istemci tarafında saat dilimi bilgileri ayıklamak gerekir, ama zaman kendisi gibi bu da hata açıktır.

My recommendation: Kullanıcıların kullanıcıların olmasını beklediğiniz dayalı bir mantıklı varsayılan kendi saat dilimini tercih edelim.

JavaScript ile ofset kullanıcıların geçerli zaman dilimini almak için bir yol var.

new Date().getTimezoneOffset() * -1

GMT ile dakika ofset döndürür. Bu Yaz Saati bağlı olarak değişebilir olarak bu değeri saklamayın. Eğer sunucu (php) üzerinde gerekiyorsa o zaman göndermek onu yakalamak gerekir.

Ne yazık ki, HTTP spec gerekir ne php bir başlık olarak kullanıcıların timezone göndermek değildir.

Ben javascript dışarı sunucu tarihini yazma öneririm. Sonra onların makinede kullanıcı tarafından belirlenen tarihi almak için javascript yeni bir tarih yok. Iki tarih farklı kullanın.

With the server date you are sure that your time is unbiased. All calculations must be done using server date.

User the difference only for display purposes. This would work well for edit logs, countdowns and selecting messages like "Good morning".

Bir kullanıcı kendi zaman başka bir şey olmak istiyorsa ... Ben onu o atalım gerektiğini düşünüyorum.

PHP hem PECL extension ve bir PEAR package o GeolP aramalarını yapabilirsiniz. Kullanıcı bazı tür bir proxy veya NAT arkasında değildir varsayarsak, veritabanı up-to-date ve doğru olduğunu ve adresi timezone almak ve hesaplamak olabilir, tüm veritabanında Sunucu zaman ofset.

Veya, sadece kullanıcının sistem saati% 100 doğru değildir, ama genellikle çok yakın olduğunu kabul edebilirim. Tüm büyük işletim sistemleri, ağ zaman sunucuları ile kendi saatlerini senkronize bazı yol var, bunların çoğu be varsayılan açıktır. Kişi "yanlış" bir zaman diliminde onların bilgisayar koymak karar verdi ise, (onlar başka bir zaman diliminde insanlar ile çalışmak, seyahat ediyorsanız) bir nedeni muhtemelen.

Kullanıcı nedense kapalı 10 dakika olması için kendi saati ayarlayabilirsiniz varsa, bunlar yanlış olma zamanı hesaplamaların sonuçlarını kabul.


Added: If your server clock is accurate (if not, like HermanD said, fix it if you control the server, complain if you don't) but is not in the right timezone, you can always use PHP ini_set() or date_default_timezone_set() to force your scripts to operate in GMT, regardless of system time zone.

javascript:

<script type="text/javascript">
var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()

if (minutes < 10){
  minutes = "0" + minutes;
}
var suffix = "AM";
if (hours >= 12) {
suffix = "PM";
hours = hours - 12;
}
if (hours == 0) {
hours = 12;
}

document.write("<b>" + hours + ":" + minutes + " " + suffix + "</b>");
</script>

output

11:51

Id sunucu saati kullanmanızı öneririz. Örnek olarak, time() function. Eğer bu değeri kapalı HERŞEYİ temel alırsanız, o zaman sistem belirli operasyonlar gereken herhangi bir zaman güvenli olacaktır.

Her bir kullanıcı, zaman contraints olan veya kullanan bir sayfa istediğinde, sunucu zaman göndermek emin olun.

, Sayfa yük, kontroller sunucu zaman gönderdi, bir JavaScript modül oluşturun ve eğer öyleyse değer okur ve JS yerel saate dönüştürür, JS getirilen veya hesaplanan zaman dilimini kullanıyor. Sonra bir JS küresel olarak kaydedebilir veya bir nesne ya da bir şey statik var olarak slam olabilir.