Moment.js не обязательно анализирует часовой пояс, если строка не соответствует формату ISO 8601 или RFC 2822. Ожидается, что часовой пояс будет в формате ± ЧЧмм, поэтому GMT+4
игнорируется.
Если вы передадите строку в конструктор без информации о формате, вы получите предупреждение и, возможно, он будет проанализирован правильно, а может и не получится.
Если вы не можете исправить формат ввода в источнике, вы можете исправить его на своем конце (при условии, что вы знаете формат), а затем указать «Z» в токенах разбора, например ::
/* Fix offset like GMT+4 to +0400
* If offset is 1 digit, pad to 0d00 -8 -> -0800
* If offset is 2 digits, pad to dd00 +10 -> +1000
* If offset is 3 digits, padd to 0ddd +530 -> +0530
* If offset is 4 digits, leave as is +1030 -> +1030
*/
function fixOffset(s) {
var tz = s.match(/(GMT)([+-])(\d+)$/);
// If not required format, do nothing
if (tz.length != 4) return;
var h = tz[3];
var offset = h.length == 1? '0' + h + '00' :
h.length == 2? h + '00' :
h.length == 3? '0' + h : h;
return s.replace(/GMT[+-]\d+$/, tz[2] + offset);
}
var s = "12/07/1998 12:30 GMT+4";
s = fixOffset(s);
console.log('Fixed format: ' + s);
console.log( moment(s,'DD/MM/YYYY HH:mm Z').format('LLLL') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>