У вас j после первого прохода становится равным 31. Цикл по i идет полностью, а по j один раз всего. Допишите, например, j = 30; в конце цикла по i и все будет как надо
var tmp = [],
i = 12,
j = 30;
for (; i < 22; i++) {
for (; j < 31; j++) {
tmp.push(i + ':' + j);
document.write(i + ':' + j);
}
j = 30;
}
Инициализируйте j в объявлении цикла, и все будет хорошо. Иначе после первой итерации по i переменная j изменяется и на следующих итерациях её значение - 31.