Конвертировать дату в другой часовой пояс в JavaScript
Я ищу функцию для преобразования даты в одном часовом поясе в другой.
Нужно два параметра,
- дата (в формате "2012/04/10 10:10:30 +0000")
- строка часового пояса ("Азия / Джакарта")
Строка часового пояса описана в http://en.wikipedia.org/wiki/Zone.tab
Есть простой способ сделать это?
36 ответов
Для пользователей moment.js теперь вы можете использовать момент-часовой пояс. Используя его, ваша функция будет выглядеть примерно так:
function toTimeZone(time, zone) {
var format = 'YYYY/MM/DD HH:mm:ss ZZ';
return moment(time, format).tz(zone).format(format);
}
var aestTime = new Date().toLocaleString("en-US", {timeZone: "Australia/Brisbane"});
aestTime = new Date(aestTime);
console.log('AEST time: '+aestTime.toLocaleString())
var asiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Shanghai"});
asiaTime = new Date(asiaTime);
console.log('Asia time: '+asiaTime.toLocaleString())
var usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"});
usaTime = new Date(usaTime);
console.log('USA time: '+usaTime.toLocaleString())
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
Большинство настольных (не мобильных) браузеров, за исключением Safari, поддерживают функцию toLocaleString с аргументами, старые браузеры обычно игнорируют аргументы.
new Date().toLocaleString('en-US', { timeZone: 'Asia/Jakarta' })
Похищен бесстыдно у: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329
/**
* function to calculate local time
* in a different city
* given the city's UTC offset
*/
function calcTime(city, offset) {
// create Date object for current location
var d = new Date();
// convert to msec
// add local time zone offset
// get UTC time in msec
var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
// create new Date object for different city
// using supplied offset
var nd = new Date(utc + (3600000*offset));
// return time as a string
return "The local time in " + city + " is " + nd.toLocaleString();
}
эта функция полезна для расчета значения часового пояса, указав название города / страны и значение смещения
Хорошо, нашел это!
Я использую часовой пояс-JS. это код:
var dt = new timezoneJS.Date("2012/04/10 10:10:30 +0000", 'Europe/London');
dt.setTimezone("Asia/Jakarta");
console.debug(dt); //return formatted date-time in asia/jakarta
Если формат не очень важен и вы не хотите импортировать какую-то большую библиотеку, вы можете просто использовать Intl.DateTimeFormat для преобразования объектов Date в разные часовые пояса.
const options = {
year: '2-digit', month: '2-digit', day: '2-digit',
hour: '2-digit', minute: '2-digit', second: '2-digit',
timeZone: 'Asia/Jakarta',
timeZoneName: 'short'
};
const formater = new Intl.DateTimeFormat('sv-SE', options)
const date = new Date("2012/04/10 10:10:30 +0000")
console.log(formater.format(date))
Смещения, переход на летнее время и другие изменения, измененные в прошлом, позаботятся о вас
Вы можете экспериментировать с языком, чтобы получить другие литералы.
Понял!
Хотел принудительно установить отображаемую дату = дата сервера, без разницы локальные настройки (UTC).
Мой сервер GMT-6 -> new Date(). GetTimezoneOffset() = 360.
myTZO = 360;
myNewDate=new Date(myOldDateObj.getTime() + (60000*(myOldDateObj.getTimezoneOffset()-myTZO)));
alert(myNewDate);
Вы можете использовать toLocaleString() метод для установки часового пояса.
new Date().toLocaleString('en-US', { timeZone: 'Indian/Christmas' })
Для Индии вы можете использовать "Индийский / Рождество", а ниже приведены различные часовые пояса,
"Antarctica/Davis",
"Asia/Bangkok",
"Asia/Hovd",
"Asia/Jakarta",
"Asia/Phnom_Penh",
"Asia/Pontianak",
"Asia/Saigon",
"Asia/Vientiane",
"Etc/GMT-7",
"Indian/Christmas"
Использование библиотеки luxon :
import { DateTime } from "luxon";
// Convert function:
const convertTz = (datetime, fromTz, toTz, format='yyyy-MM-dd HH:mm:ss') => {
return DateTime.fromFormat(datetime, format, { zone: fromTz }).setZone(toTz).toFormat(format);
}
// Use it like this:
console.log(convertTz('2021-10-03 19:00:00', 'Europe/Lisbon', 'America/New_York'));
Простое, функциональное и кроссбраузерное решение для преобразования между часовыми поясами и преобразования даты в строку с выбранным часовым поясом:
export function convertTimeZone(
date: Date,
timeZoneFrom?: string | null, // default timezone is Local
timeZoneTo?: string | null, // default timezone is Local
): Date {
const dateFrom = timeZoneFrom == null
? date
: new Date(
date.toLocaleString('en-US', {
timeZone: timeZoneFrom,
}),
)
const dateTo = timeZoneTo == null
? date
: new Date(
date.toLocaleString('en-US', {
timeZone: timeZoneTo,
}),
)
const result = new Date(date.getTime() + dateTo.getTime() - dateFrom.getTime())
return result
}
export function dateToString(date: Date, timeZone: string): string {
date = convertTimeZone(date, 'UTC', timeZone)
const year = date.getUTCFullYear().toString().padStart(4, '0')
const month = (date.getUTCMonth() + 1).toString().padStart(2, '0')
const day = date.getUTCDate().toString().padStart(2, '0')
const hours = date.getUTCHours().toString().padStart(2, '0')
const minutes = date.getUTCMinutes().toString().padStart(2, '0')
const seconds = date.getUTCSeconds().toString().padStart(2, '0')
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}
Тесты
describe('date', function () {
it('convertTimeZone', function () {
// UTC => UTC
expect(convertTimeZone(new Date('2020-01-01T00:00:00.000Z'), 'UTC', 'UTC'))
.toEqual(new Date('2020-01-01T00:00:00.000Z'))
// UTC => Europe/Kiev
expect(convertTimeZone(new Date('2020-01-01T00:00:00.000Z'), 'UTC', 'Europe/Kiev'))
.toEqual(new Date('2020-01-01T02:00:00.000Z'))
// Europe/Kiev => UTC
expect(convertTimeZone(new Date('2020-01-01T00:00:00.000Z'), 'Europe/Kiev', 'UTC'))
.toEqual(new Date('2019-12-31T22:00:00.000Z'))
// Europe/Kiev => America/Los_Angeles
expect(convertTimeZone(new Date('2020-01-01T00:00:00.000Z'), 'Europe/Kiev', 'America/Los_Angeles'))
.toEqual(new Date('2019-12-31T14:00:00.000Z'))
// America/Los_Angeles => Europe/Kiev
expect(convertTimeZone(new Date('2020-01-01T00:00:00.000Z'), 'America/Los_Angeles', 'Europe/Kiev'))
.toEqual(new Date('2020-01-01T10:00:00.000Z'))
// Local => Local
expect(convertTimeZone(new Date('2020-01-01T00:00:00.000Z'), null, null))
.toEqual(new Date('2020-01-01T00:00:00.000Z'))
// forward and backward for timezone list
const timeZones = [
null, // Local
'UTC',
'Europe/Kiev',
'America/Los_Angeles',
'America/New_York',
'America/Chicago',
'America/Denver',
'Europe/London',
'Europe/Paris',
'Europe/Moscow',
'Europe/Berlin',
'Asia/Tokyo',
'Asia/Shanghai',
'Asia/Hong_Kong',
'Asia/Kolkata',
'Australia/Sydney',
'Australia/Melbourne',
'Australia/Perth',
'Australia/Brisbane',
]
for (const timeZoneFrom of timeZones) {
for (const timeZoneTo of timeZones) {
const date = new Date('2020-01-01T00:00:00.000Z')
const result = convertTimeZone(date, timeZoneFrom, timeZoneTo)
const resultBack = convertTimeZone(result, timeZoneTo, timeZoneFrom)
expect(resultBack).toEqual(date)
}
}
})
it('dateToString', function () {
expect(dateToString(new Date('2020-01-01T00:00:00.000Z'), 'UTC'))
.toEqual('2020-01-01 00:00:00')
expect(dateToString(new Date('2020-01-01T00:00:00.000Z'), 'Europe/Kiev'))
.toEqual('2020-01-01 02:00:00')
expect(dateToString(new Date('2020-01-01T00:00:00.000Z'), 'America/Los_Angeles'))
.toEqual('2019-12-31 16:00:00')
expect(dateToString(new Date('2020-01-01T00:00:00.000Z'), 'America/New_York'))
.toEqual('2019-12-31 19:00:00')
})
it('dateToString current', function () {
console.log(`Current date UTC: ${dateToString(new Date(), 'UTC')}`)
console.log(`Current date Europe/Kiev: ${dateToString(new Date(), 'Europe/Kiev')}`)
console.log(`Current date America/Los_Angeles: ${dateToString(new Date(), 'America/Los_Angeles')}`)
})
})
Если вам просто нужно конвертировать часовые пояса, я загрузил урезанную версию моментного часового пояса с минимальной функциональностью. Его ~1KB + данные:
S.loadData({
"zones": [
"Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6",
"Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5",
],
"links": [
"Europe/Paris|Europe/Madrid",
]
});
let d = new Date();
console.log(S.tz(d, "Europe/Madrid").toLocaleString());
console.log(S.tz(d, "Australia/Sydney").toLocaleString());
Установите переменную с указанием года, месяца и дня, разделенных символами "-", плюс "T" и время в формате ЧЧ: мм: сс, за которым следует +01:00 в конце строки (в моем случае часовой пояс +1). Затем используйте эту строку в качестве аргумента для конструктора даты.
//desired format: 2001-02-04T08:16:32+01:00
dateAndTime = year+"-"+month+"-"+day+"T"+hour+":"+minutes+":00+01:00";
var date = new Date(dateAndTime );
Вот мой код, он работает отлично, вы можете попробовать с приведенным ниже демо:
$(document).ready(function() {
//EST
setInterval( function() {
var estTime = new Date();
var currentDateTimeCentralTimeZone = new Date(estTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));
var seconds = currentDateTimeCentralTimeZone.getSeconds();
var minutes = currentDateTimeCentralTimeZone.getMinutes();
var hours = currentDateTimeCentralTimeZone.getHours()+1;//new Date().getHours();
var am_pm = currentDateTimeCentralTimeZone.getHours() >= 12 ? "PM" : "AM";
if (hours < 10){
hours = "0" + hours;
}
if (minutes < 10){
minutes = "0" + minutes;
}
if (seconds < 10){
seconds = "0" + seconds;
}
var mid='PM';
if(hours==0){ //At 00 hours we need to show 12 am
hours=12;
}
else if(hours>12)
{
hours=hours%12;
mid='AM';
}
var x3 = hours+':'+minutes+':'+seconds +' '+am_pm
// Add a leading zero to seconds value
$("#sec").html(x3);
},1000);
});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<p class="date_time"><strong id="sec"></strong></p>
</body>
</html>
Я должен отметить, что я ограничен в отношении того, какие внешние библиотеки я могу использовать. Moment.js и timezone-js НЕ были вариантом для меня.
У меня дата объекта JS находится в UTC. Мне нужно было получить дату и время от этой даты в определенном часовом поясе ("Америка / Чикаго" в моем случае).
var currentUtcTime = new Date(); // This is in UTC
// Converts the UTC time to a locale specific format, including adjusting for timezone.
var currentDateTimeCentralTimeZone = new Date(currentUtcTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));
console.log('currentUtcTime: ' + currentUtcTime.toLocaleDateString());
console.log('currentUtcTime Hour: ' + currentUtcTime.getHours());
console.log('currentUtcTime Minute: ' + currentUtcTime.getMinutes());
console.log('currentDateTimeCentralTimeZone: ' + currentDateTimeCentralTimeZone.toLocaleDateString());
console.log('currentDateTimeCentralTimeZone Hour: ' + currentDateTimeCentralTimeZone.getHours());
console.log('currentDateTimeCentralTimeZone Minute: ' + currentDateTimeCentralTimeZone.getMinutes());
В настоящее время UTC на 6 часов опережает Америку / Чикаго. Выход:
currentUtcTime: 11/25/2016
currentUtcTime Hour: 16
currentUtcTime Minute: 15
currentDateTimeCentralTimeZone: 11/25/2016
currentDateTimeCentralTimeZone Hour: 10
currentDateTimeCentralTimeZone Minute: 15
Вы также можете использовать https://www.npmjs.com/package/ctoc_timezone
Он имеет очень простую реализацию и настройку формата.
Изменение формата в toTimeZone:
CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");
Выход:
28th Feb 2013 19:00:00 EST
Вы можете изучить несколько функций в документе.
Вы можете использовать Intl.DateTimeFormat, чтобы указать часовой пояс в качестве опции, и он преобразует дату или время в желаемый часовой пояс.
let timezone = "Asia/Jakarta";
let date = new Date("2012/04/10 10:10:30 +0000");
let formattedDate = new Intl.DateTimeFormat("en-US", { dateStyle: "long" , timeStyle: "short", timeZone: timezone}).format(date);
Я не знаю простого способа преобразования объекта даты в любой часовой пояс, но если вы хотите преобразовать его в местный часовой пояс, вы можете просто преобразовать его с помощью Date.prototype.getTime()
на соответствующее количество миллисекунд и обратно.
date = new Date('2016-05-24T13:07:20');
date = new Date(date.getTime());
Например, date.getHours()
сейчас вернусь 15
вместо 13
если вы, как и я, в Австрии (и это лето).
Я читал, что различные функции datetime могут демонстрировать нестандартное поведение в некоторых браузерах, поэтому сначала проверьте это. Я могу подтвердить, что он работает в Chrome.
Я недавно сделал это в Typescript:
// fromTimezone example : Europe/Paris, toTimezone example: Europe/London
private calcTime( fromTimezone: string, toTimezone: string, dateFromTimezone: Date ): Date {
const dateToGetOffset = new Date( 2018, 5, 1, 12 );
const fromTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: fromTimezone, hour12: false } );
const toTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: toTimezone, hour12: false } );
const fromTimeHours: number = parseInt( fromTimeString.substr( 0, 2 ), 10 );
const toTimeHours: number = parseInt( toTimeString.substr( 0, 2 ), 10 );
const offset: number = fromTimeHours - toTimeHours;
// convert to msec
// add local time zone offset
// get UTC time in msec
const dateFromTimezoneUTC = Date.UTC( dateFromTimezone.getUTCFullYear(),
dateFromTimezone.getUTCMonth(),
dateFromTimezone.getUTCDate(),
dateFromTimezone.getUTCHours(),
dateFromTimezone.getUTCMinutes(),
dateFromTimezone.getUTCSeconds(),
);
// create new Date object for different city
// using supplied offset
const dateUTC = new Date( dateFromTimezoneUTC + ( 3600000 * offset ) );
// return time as a string
return dateUTC;
}
Я использую формат "en-UK", потому что он простой. Может быть "en-US" или что-то еще работает.
Если первый аргумент - ваш часовой пояс, а secondde - ваш целевой часовой пояс, он возвращает объект Date с правильным смещением.
Вы можете попробовать это также для конвертации даты и часового пояса в Индию:
var indianTimeZoneVal = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'});
var indainDateObj = new Date(indianTimeZoneVal);
indainDateObj.setHours(indainDateObj.getHours() + 5);
indainDateObj.setMinutes(indainDateObj.getMinutes() + 30);
console.log(indainDateObj);
Люди знакомы с Java 8 java.time
пакет или joda-time
вероятно, будет любить нового ребенка на блоке: библиотека js-joda.
устанавливать
npm install js-joda js-joda-timezone --save
пример
<script src="node_modules/js-joda/dist/js-joda.js"></script>
<script src="node_modules/js-joda-timezone/dist/js-joda-timezone.js"></script>
<script>
var dateStr = '2012/04/10 10:10:30 +0000';
JSJoda.use(JSJodaTimezone);
var j = JSJoda;
// https://js-joda.github.io/js-joda/esdoc/class/src/format/DateTimeFormatter.js~DateTimeFormatter.html#static-method-of-pattern
var zonedDateTime = j.ZonedDateTime.parse(dateStr, j.DateTimeFormatter.ofPattern('yyyy/MM/dd HH:mm:ss xx'));
var adjustedZonedDateTime = zonedDateTime.withZoneSameInstant(j.ZoneId.of('America/New_York'));
console.log(zonedDateTime.toString(), '=>', adjustedZonedDateTime.toString());
// 2012-04-10T10:10:30Z => 2012-04-10T06:10:30-04:00[America/New_York]
</script>
В истинной природе Java это довольно многословно, смеется. Но, будучи портированной java-библиотекой, особенно учитывая, что они портировали 1800-е тестовые сценарии, она также, вероятно, работает превосходно точно.
Хронические манипуляции это сложно. Вот почему многие другие библиотеки глючат в крайних случаях. Moment.js, кажется, правильно настроил часовые пояса, но другие js-библиотеки, которые я видел, включая timezone-js
не кажется заслуживающим доверия.
Укажите желаемый часовой пояс, например "Азия / Тегеран", чтобы изменить текущее время на этот часовой пояс. Я использовал "Азия / Сеул".
Вы можете использовать следующие коды. при необходимости измените стиль.
Имейте в виду, что если вы хотите использовать формат h: m: s вместо HH:MM:SS, вам придется удалить "function kcwcheckT(i)".
function kcwcheckT(i) {
if (i < 10) {
i = "0" + i;
}
return i;
}
function kcwt() {
var d = new Date().toLocaleString("en-US", {timeZone: "Asia/Seoul"});
d = new Date(d);
var h = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
h = kcwcheckT(h);
m = kcwcheckT(m);
s = kcwcheckT(s);
document.getElementById("kcwcurtime").innerHTML = h + ":" + m + ":" + s;
var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
document.getElementById("kcwcurday").innerHTML = days[d.getDay()]
}
kcwt();
window.setInterval(kcwt, 1000);
@import url('https://fonts.googleapis.com/css2?family=Nunito&display=swap');
.kcwsource {color:#040505;cursor: pointer;display:block;width: 100%;border: none;border-radius:5px;text-align:center;padding: 5px 10px 5px 10px;}
.kcwsource p {font-family: 'Nunito', sans-serif;}
.CurTbx {color:#040505;cursor: pointer;display:block;width: 100%;border: none;border-radius:5px;text-align:center;padding: 5px 10px 5px 10px;}
.kcwcstyle {font-family: 'Nunito', sans-serif; font-size: 22px;display: inline-block;}
.kcwcurstinf {font-family: 'Nunito', sans-serif; font-size: 18px;display: inline-block;margin: 0;}
.kcwcurday {margin: 0;}
.kcwcurst {margin: 0 10px 0 5px;}
/*Using the css below you can make your style responsive!*/
@media (max-width: 600px){
.kcwcstyle {font-size: 14px;}
.kcwcurstinf {font-size: 12px;}
}
<div class="kcwsource"><p>This Pen was originally developed for <a href="http://kocowafa.com" target="_blank">KOCOWAFA.com</a></p></div>
<div class="CurTbx"><p class="kcwcurst kcwcstyle" id="kcwcurday"></p><p class="kcwcurst kcwcstyle" id="kcwcurtime"></p><p class="kcwcurstinf">(Seoul, Korea)</p></div>
У меня были проблемы с использованием часового пояса Момент. Я добавляю этот ответ просто так, если кто-то еще сталкивается с той же проблемой. Итак, у меня есть строка даты 2018-06-14 13:51:00
исходя из моего API
, Я знаю, что это хранится в UTC
но строка не говорит сама за себя.
Я позволю моментному часовому поясу знать, из какого часового пояса эта дата делает:
let uTCDatetime = momentTz.tz("2018-06-14 13:51:00", "UTC").format();
// If your datetime is from any other timezone then add that instead of "UTC"
// this actually makes the date as : 2018-06-14T13:51:00Z
Теперь я хотел бы преобразовать его в определенный часовой пояс, выполнив:
let dateInMyTimeZone = momentTz.tz(uTCDatetime, "Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss");
// now this results into: 2018-06-14 19:21:00, which is the corresponding date in my timezone.
Посмотрев вокруг много, включая ссылки с этой страницы, я нашел эту замечательную статью, используя часовой пояс момента:
Подводя итог это:
Получить часовой пояс пользователя
var tz = moment.tz.guess();
console.info('Timezone: ' + tz);
Например: часовой пояс: Европа / Лондон
Установите часовой пояс пользователя по умолчанию
moment.tz.setDefault(tz);
Установить пользовательский часовой пояс
moment.tz.setDefault('America/Los_Angeles');
Конвертировать дату / время в местный часовой пояс, предполагая, что исходная дата / время указаны в UTC
moment.utc('2016-12-25 07:00').tz(tz).format('ddd, Do MMMM YYYY, h:mma');
Возвращает: вс, 25 декабря 2016 года, 7:00 утра
Конвертировать дату / время в LA Time
moment.utc('2016-12-25 07:00').tz('America/Los_Angeles').format('ddd, Do MMMM YYYY, h:mma');
Возвращение: суббота, 24 декабря 2016 года, 23:00
Конвертировать из ЛА в Лондон
moment.tz('2016-12-25 07:00', 'America/Los_Angeles').tz('Europe/London').format( 'ddd, Do MMMM YYYY, h:mma' );
Возвращает: вс, 25 декабря 2016 года, 15:00
Для этого вы можете использовать модуль npm timezones.json; в основном он состоит из файла json с объектами, содержащими информацию о летнем и офсетном режиме,....
для Азии / Джакарты он сможет вернуть этот объект:
{
"value": "SE Asia Standard Time",
"abbr": "SAST",
"offset": 7,
"isdst": false,
"text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
"utc": [
"Antarctica/Davis",
"Asia/Bangkok",
"Asia/Hovd",
"Asia/Jakarta",
"Asia/Phnom_Penh",
"Asia/Pontianak",
"Asia/Saigon",
"Asia/Vientiane",
"Etc/GMT-7",
"Indian/Christmas"
]
}
Вы можете найти это здесь:
https://github.com/dmfilipenko/timezones.json
https://www.npmjs.com/package/timezones.json
надеюсь, что это полезно
Просто установите часовой пояс желаемой страны, и вы можете легко отображать в html его обновление с помощью функции SetInteval() через каждую минуту. функция formatAMPM() управляет 12-часовым форматом и отображением времени AM/PM.
$(document).ready(function(){
var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
pakTime = new Date(pakTime);
var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
libyaTime = new Date(libyaTime);
document.getElementById("pak").innerHTML = "PAK "+formatAMPM(pakTime);
document.getElementById("ly").innerHTML = "LY " +formatAMPM(libyaTime);
setInterval(function(today) {
var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
pakTime = new Date(pakTime);
var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
libyaTime = new Date(libyaTime);
document.getElementById("pak").innerHTML = "PAK "+formatAMPM(pakTime);
document.getElementById("ly").innerHTML = "LY " +formatAMPM(libyaTime);
},10000);
function formatAMPM(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var ampm = hours >= 12 ? 'pm' : 'am';
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
minutes = minutes < 10 ? '0'+minutes : minutes;
var strTime = hours + ':' + minutes + ' ' + ampm;
return strTime;
}
});
есть проблема с сервером, выберите стандартный часовой пояс gmt+ 0000, вы можете изменить его, используя библиотечный момент-часовой пояс в javascript
const moment = require("moment-timezone")
const dateNew = new Date()
const changeZone = moment(dateNew);
changeZone.tz("Asia/Karachi").format("ha z");
// here you can paste "your time zone string"
Немного избыточно со всеми этими ответами, но это сработало для меня для получения текущего объекта Date с определенным почасовым смещением.
Код ниже подходит для этого вопроса и может помочь другим с похожими проблемами. Это может быть полезно, когда нам нужна эпоха в миллисекундах или временные метки UNIX в другом часовом поясе.