MomentJS: Как преобразовать время в определенном часовом поясе и определенном формате в миллисекунды - PullRequest
0 голосов
/ 02 мая 2019

У меня есть время «2000» в формате «ччмм» для определенного часового пояса, например, «Азия / Калькутта».Пробовал пару подходов, упомянутых в других ответах, но ни один не дает правильных ответов.

Ожидаемый : Точное время в местном часовом поясе (8 часов вечера в Азии / Калькутте)

Это выполняется на стороне сервера в NodeJ, а не в браузере.

Попробовал эти методы:

let localTime1 = moment('2000').tz('Asia/Kolkata');
let localTime2 = moment('2000','hhmm').tz('Asia/Kolkata');
let localTime3 = moment('2000', 'hhmm', 'Asia/Kolkata');

Оба дают значение 1556827200000, которое равно 1: 30 часов вечера в местном часовом поясе и 8 часов вечера в UTC.

Мне нужно 8 часов вечера в местном часовом поясе.

Я также получаюпредупреждение, как показано ниже:

Deprecation warning: value provided is not in a recognized RFC2822 or ISO 
format. moment construction falls back to js Date(), which is not reliable             
across all browsers and versions. Non RFC2822/ISO date formats are 
discouraged and will be removed in an upcoming major release. Please refer to 
http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments: 
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: 
2000, _f: undefined, _strict: undefined, _locale: [object Object]
Error
at Function.createFromInputFallback (/user_code/node_modules/moment-timezone/node_modules/moment/moment.js:320:98)
at configFromString (/user_code/node_modules/moment-timezone/node_modules/moment/moment.js:2385:15)
at configFromInput (/user_code/node_modules/moment-timezone/node_modules/moment/moment.js:2611:13)
at prepareConfig 

Любая помощь в правильном направлении будет полезна.Спасибо!

Ответы [ 2 ]

2 голосов
/ 02 мая 2019
  1. Для анализа '2000' как 8:00pm используйте: 'HHmm' (Как отмечено в документах Moment при разборе , токены синтаксического анализа чувствительны к регистру. 'hh' для 12 форматы часового времени)

  2. Для анализа даты / времени в конкретном часовом поясе используйте функцию moment.tz(..., String); .

Это даст вам «8:00 вечера в часовом поясе Азии / Калькутты», а не «8:00 вечера UTC , преобразованные в часовой пояс Азии / Калькутты».

Собираем все вместе:

const moment = require('moment-timezone');

let localTime1 = moment.tz('2000', 'HHmm', 'Asia/Kolkata')

console.log(localTime1.toString());
// 'Thu May 02 2019 20:00:00 GMT+0530'

Конечно, вы можете использовать функции форматирования Moment для вывода даты / времени в любом нужном вам формате:)

0 голосов
/ 02 мая 2019

Попробуйте это, Надеемся, что полезно:

moment('2000','hh:mm').tz('Asia/Kolkata').format('hh:mm');

или еще, попробуйте ссылку ниже: скопируйте приведенный ниже код и вставьте его в область JavaScript и увидите 3-ю строку вывода.

$('#divThai').text(moment('2000','hh:mm').tz('Asia/Kolkata').format('hh:mm'));

http://jsfiddle.net/uq99udc9/4/

...