Ранее использовал такой код:
var date = new Date("2019", "05", "31", "13", "45", "00");
date.setHours(date.getHours() + 3);
var date_time = date.getFullYear() + '-' + ('0' + (date.getMonth())).slice(-2) + '-' + ('0' + date.getDate()).slice(-2)+" "+('0' + (date.getHours())).slice(-2)+":"+('0' + (date.getMinutes())).slice(-2)+":"+('0' + (date.getSeconds())).slice(-2);
Получал дату в формате YYYY-MM-DD HH:mm:ss, но сегодня заметил что скрипт в место 31-го числа выдал первое июня, нашел здесь пост с похожей проблемой, там решением было использование библиотеки moment.js, что я и сделал.
var moment = require('moment');
var date = moment([2010, 1, 12, 15, 25, 50, 125]).add(3, 'hours');
console.log('DATE ' + moment(date).format("YYYY-MM-DD HH:mm:ss"));
Выдает: DATE 2010-02-12 18:25:50
Почему добавляется месяц и как выводить корректную дату?