Я знаю, як компенсувати часовий пояс, але мені потрібна можливість виявити щось на кшталт "Америка / Нью-Йорк". Це можливо навіть із JavaScript або це те, що я маю зробити, щоб оцінити, виходячи зі зміщення?
Я знаю, як компенсувати часовий пояс, але мені потрібна можливість виявити щось на кшталт "Америка / Нью-Йорк". Це можливо навіть із JavaScript або це те, що я маю зробити, щоб оцінити, виходячи зі зміщення?
Відповіді:
В API Інтернаціоналізація підтримує отримання часового поясу користувача, і підтримуються в усіх сучасних браузерах.
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
Майте на увазі, що для деяких старих версій браузера, які підтримують інтернаціоналізаційний API, timeZone
властивість встановлено undefined
не на рядок часового поясу користувача. Як найкраще я можу сказати, що під час написання (липень 2017 року) усі поточні браузери, крім IE11 , повернуть часовий пояс користувача у вигляді рядка.
Відповідь на найбільш обґрунтовану відповідь - це, мабуть, найкращий спосіб отримати часовий пояс, однак Intl.DateTimeFormat().resolvedOptions().timeZone
повертає назву часового поясу IANA за визначенням, що англійською мовою.
Якщо ви хочете, щоб ім'я часового поясу мовою поточного користувача було розібрано з Date
представлення рядка таким чином:
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());
Тестували в Chrome і Firefox.
Звичайно, це не вийде, як задумано в деяких середовищах. Наприклад, node.js повертає зміщення GMT (наприклад GMT+07:00
) замість імені. Але я думаю, що це все ще читається як запасний варіант.
PS не працюватиме в IE11, як Intl...
рішення.
Ви можете використовувати цей сценарій. http://pellepim.bitbucket.org/jstz/
Тут виберіть або сходіть на сховище. https://bitbucket.org/pellepim/jstimezonedetect
Після включення сценарію ви можете отримати список часових поясів у jstz.olson.timezones
змінній.
І наступний код використовується для визначення часового поясу браузера клієнта.
var tz = jstz.determine();
tz.name();
Насолоджуйтесь jstz!
Отримайте часовий пояс за назвою (тобто "Америка / Нью-Йорк")
moment.tz.guess();
Intl.DateTimeFormat().resolvedOptions().timeZone
Intl.DateTimeFormat().resolvedOptions().timeZone
повертає undefined
, але moment.tz.guess()
повертає правильне значення
Ви можете просто написати власний код, скориставшись таблицею відображення тут: http://www.timeanddate.com/time/zones/
або скористайтеся бібліотекою моменту часового поясу: http://momentjs.com/timezone/docs/
Побачити zone.name; // America/Los_Angeles
або, ця бібліотека: https://github.com/Canop/tzdetect.js
Це отримує код часового поясу (наприклад, GMT
) у старшому JavaScript (я використовую сценарій програми google зі старим механізмом):
function getTimezoneName() {
return new Date().toString().get(/\((.+)\)/);
}
Я просто кладу це на випадок, якщо комусь це потрібно.
UTC
/ GMT
. Схоже, прописано інших; наприклад, Pacific Daylight Time
.
Спробуйте вказати цей код звідси
<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>
У javascript метод Date.getTimezoneOffset () повертає зсув часового поясу від UTC за хвилини для поточного локалу.
var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;
Moment'timezone стане корисним інструментом. http://momentjs.com/timezone/
Перетворити дати між часовими зонами
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