Разница - второй параметр. Их второй параметр, в то время как оба числа ожидают двух разных вещей:
При использовании подстроки второй параметр является первым индексом, который не должен включать:
var s = "string";
s.substring(1, 3); // would return 'tr'
var s = "another example";
s.substring(3, 7); // would return 'ther'
При использовании substr второй параметр - количество символов для включения в подстроку:
var s = "string";
s.substr(1, 3); // would return 'tri'
var s = "another example";
s.substr(3, 7); // would return 'ther ex'