Строки даты не имеют часового пояса. Использование встроенного синтаксического анализатора для любого формата, отличного от указанного в ECMA-262 (ограниченное подмножество ISO 8601), зависит от реализации и не должно использоваться, см. Почему Date.parse дает неверные результаты
Несколько вариантов - проанализировать строку как значения UTC, а затем использовать toISOString и удалить завершающий Z, или вы можете просто переформатировать строку, например,
var s = '4/7/2018';
// Parse string in m/d/y format and return
// in ISO 8601 format
function parseDMY(s) {
var b = s.split(/\D/);
return new Date(Date.UTC(b[2],b[0]-1,b[1])).toISOString().slice(0,19);
}
console.log(parseDMY(s));
function reformatDate(s) {
var b = s.split(/\D/);
function z(n){return (n<10?'0':'')+n};
return `${b[2]}-${z(b[0])}-${z(b[1])}T00:00:00`;
}
console.log(reformatDate(s));
Но на самом деле, если у вас просто есть дата, ее следует оставить как просто дату, поэтому:
var s = '4/7/2018';
// Assume date is M/D/Y
function reformatDate(s) {
var a = s.split(/\D/).map(n=>(n<10?'0':'')+n);
return a[2]+'-'+a[0]+'-'+a[1];
}
console.log(reformatDate(s));