У меня есть дата/время с часовым поясом, и я хочу преобразовать его в UTC.
const date = '2019-04-10T20:30:00Z';
const zone = 'Asia/Kuala_Lumpur';
const utcDate = moment(date).tz(zone).utc().format();
console.info('UTC Date : ', utcDate);
моя переменная даты находится в стандартном формате для UTC? Как перевести этот часовой пояс в другой часовой пояс?
Проблема в том, что '2019-04-10T20:30:00Z'
уже является стандартным форматом для этой даты и времени в UTC? И что, когда вы переводите его на азиатское время, это неправильно, потому что вы предполагаете, что «2019-04-10T20:30:00Z» — это местное время?
@naibkhan У меня есть дата/время с timzone (это случайное или динамическое) и я хочу преобразовать его в UTC
Строки даты и времени, содержащие T между датой и временем и оканчивающиеся на Z, являются международным стандартом для времени UTC. ИСО 8601. Поэтому, если предполагается, что это местное время, попробуйте исправить все, что генерирует эти случайные/динамические строки даты и времени. Вы можете удалить «Z» в конце, чтобы убедиться, что строка сначала анализируется как местное время.
Вы можете сделать это, как код ниже:
// your inputs
var date = '2019-04-10T20:30:00Z';
var desiredFormate = "MM/DD/YYYY h:mm:ss A"; // must match the input
var zone = 'Asia/Kuala_Lumpur';
// construct a moment object
var m = moment.tz(date , desiredFormate, zone);
// convert it to utc
m.utc();
// format it for output
var s = m.format(fmt) // result: 2017-08-31T08:45:00+06:00
Часовой пояс UTC обозначается суффиксом «Z», поэтому вам нужно удалить "Z"
и использовать moment.tz(..., String)
вместо moment().tz(String)
, потому что первый создает момент с часовым поясом, а второй используется для изменения часового пояса в существующий момент:
const date = '2019-04-10T20:30:00';
const zone = 'Asia/Kuala_Lumpur';
const utcDate = moment.tz(date, zone).utc().format();
console.info('UTC Date : ', utcDate);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>
Вы можете использовать документацию момент.js:
moment().format('MMMM Do YYYY, h:mm:ss a'); // April 10th 2019, 3:29:36 pm
moment().format('dddd'); // Wednesday
moment().format("MMM Do YY"); // Apr 10th 19
moment().format('YYYY [escaped] YYYY'); // 2019 escaped 2019
moment().format();
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();
}
При ответе на старый вопрос ваш ответ был бы гораздо полезнее для других пользователей StackOverflow, если бы вы включили некоторый контекст, чтобы объяснить, как ваш ответ помогает, особенно для вопроса, на который уже есть принятый ответ. См.: Как написать хороший ответ.
const date = new Date();
console.info(date);
const zone = 'Asia/Karachi';
const utcDate = moment.tz(date, zone).utc().format();
console.info('UTC Date : ', utcDate);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>
в чем собственно вопрос??