Saya tahu cara mengimbangi zona waktu, tetapi yang saya butuhkan adalah kemampuan untuk mendeteksi sesuatu seperti "Amerika / New York". Apakah itu mungkin dari JavaScript atau apakah itu sesuatu yang harus saya beri guestimate berdasarkan offset?
Saya tahu cara mengimbangi zona waktu, tetapi yang saya butuhkan adalah kemampuan untuk mendeteksi sesuatu seperti "Amerika / New York". Apakah itu mungkin dari JavaScript atau apakah itu sesuatu yang harus saya beri guestimate berdasarkan offset?
Jawaban:
The Internasionalisasi API mendukung mendapatkan zona waktu pengguna, dan didukung di semua browser saat ini.
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
Perlu diingat bahwa pada beberapa versi browser lama yang mendukung Internationalization API, timeZone
properti disetel ke undefined
daripada string zona waktu pengguna. Sejauh yang saya tahu, pada saat penulisan (Juli 2017) semua browser saat ini kecuali IE11 akan mengembalikan zona waktu pengguna sebagai string.
Jawaban yang paling banyak disukai mungkin adalah cara terbaik untuk mendapatkan zona waktu, namun, Intl.DateTimeFormat().resolvedOptions().timeZone
mengembalikan nama zona waktu IANA menurut definisi, dalam bahasa Inggris.
Jika Anda ingin nama zona waktu dalam bahasa pengguna saat ini, Anda dapat menguraikannya dari Date
representasi string seperti:
function getTimezoneName() {
const today = new Date();
const short = today.toLocaleDateString(undefined);
const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });
// Trying to remove date from the string in a locale-agnostic way
const shortIndex = full.indexOf(short);
if (shortIndex >= 0) {
const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
// by this time `trimmed` should be the timezone's name with some punctuation -
// trim it from both sides
return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');
} else {
// in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
return full;
}
}
console.log(getTimezoneName());
Diuji di Chrome dan Firefox.
Tentu saja, ini tidak akan berfungsi sebagaimana mestinya di beberapa lingkungan. Misalnya, node.js mengembalikan offset GMT (misalnya GMT+07:00
) sebagai ganti nama. Tapi saya pikir itu masih bisa dibaca sebagai fallback.
PS Tidak akan berfungsi di IE11, hanya sebagai Intl...
solusinya.
Anda dapat menggunakan skrip ini. http://pellepim.bitbucket.org/jstz/
Fork atau clone repository di sini. https://bitbucket.org/pellepim/jstimezonedetect
Setelah Anda memasukkan skrip, Anda bisa mendapatkan daftar zona waktu dalam jstz.olson.timezones
variabel - .
Dan kode berikut digunakan untuk menentukan zona waktu browser klien.
var tz = jstz.determine();
tz.name();
Selamat menikmati jstz!
Ambil zona waktu menurut nama (yaitu "Amerika / New York")
moment.tz.guess();
Intl.DateTimeFormat().resolvedOptions().timeZone
Intl.DateTimeFormat().resolvedOptions().timeZone
memberikan kembali undefined
, tetapi moment.tz.guess()
mengembalikan nilai yang benar
Anda cukup menulis kode Anda sendiri dengan menggunakan tabel pemetaan di sini: http://www.timeanddate.com/time/zones/
atau, gunakan pustaka zona waktu: http://momentjs.com/timezone/docs/
Lihat zone.name; // America/Los_Angeles
atau, perpustakaan ini: https://github.com/Canop/tzdetect.js
Ini mendapatkan kode zona waktu (mis., GMT
) Di javascript lama (Saya menggunakan skrip aplikasi google dengan mesin lama):
function getTimezoneName() {
return new Date().toString().get(/\((.+)\)/);
}
Saya hanya meletakkan ini di sini jika seseorang membutuhkannya.
UTC
/ GMT
. Sepertinya orang lain dibilang; mis Pacific Daylight Time
. , .
Coba kode ini merujuk dari sini
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
var tz = jstz.determine(); // Determines the time zone of the browser client
var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.
alert(timezone);
});
</script>
Dalam javascript, metode Date.getTimezoneOffset () mengembalikan offset zona waktu dari UTC, dalam menit, untuk lokal saat ini.
var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;
Zona waktu akan menjadi alat yang berguna. http://momentjs.com/timezone/
Ubah Tanggal Antar Zona Waktu
var newYork = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london = newYork.clone().tz("Europe/London");
newYork.format(); // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format(); // 2014-06-01T17:00:00+01:00