Я работаю над последующим вопросом к одному, который я опубликовал here, который был разрешен.Как хранить и извлекать переменные javascript, которые я создал?
В моем приложении я получаю массив значений, которые берутся из динамического поля в форме ввода (поле списка форм тяжести). Массив тестирования, который имеет ту же структуру, может быть создан таким образом:
var entries = new Array();
entries[0] = new Array(1, 1, 2016, "9:00", "am", "5:00", "pm");
entries[1] = new Array(1, 2, 2016, "9:10", "am", "5:10", "pm");
слева направо, эти значения: месяц, день, год, время начала, звезда период времени, время окончания, период времени окончания.
Поскольку это динамический ввод - может быть любое количество подмассивов на реальном представлении.
Моя цель состоит в том, чтобы иметь массив временных меток unix, которые я могу использовать для выполнения валидации при отправке формы. Одной проверкой будет «текущая дата более чем за 6 месяцев до последней поданной даты».
Следующий код демонстрирует, как я могу создавать временные метки.
Я ищу способ добавления неограниченного количества временных меток в мой массив.
Я также ищу метод таргетинга временных меток, как только я их получу.
// Create an array to collect timestamps
var sessions = new Array();
// Ready the Zero Prepend-er so dates are always correct
function twoDigitFormat(num) {
return (num.toString().length < 2 ? "0"+num : num).toString();
}
// Loop through entries array to get each entry array
for (i = 0; i < entries.length; i++) {
var entry = entries[i];
// Loop through each entry array to get the values
for (j = 0; j < entry.length; j++) {
var value = entry[j];
// get all of the parts
var month = twoDigitFormat(entry[0]);
var day = twoDigitFormat(entry[1]);
var year = entry[2];
var stime = entry[3];
var stimeperiod = entry[4];
var etime = entry[5];
var etimeperiod = entry[6];
}
// Make Human Timestamps for each entry array
var sessionStartString = month+'-'+day+'-'+year+' '+stime+''+stimeperiod;
var sessionEndString = month+'-'+day+'-'+year+' '+etime+''+etimeperiod;
// I'm using moments.js for time handling
// Make Session Moments for each timestamp
var sStartMoment = moment(sessionStartString, "MM-DD-YYYY HH:mm a");
var sEndMoment = moment(sessionEndString, "MM-DD-YYYY HH:mm a");
// Make UNIX format moments for each timestamp
var sStartUnix = sStartMoment.unix();
var sEndUnix = sEndMoment.unix();
// Add each UNIX timestamp to the sessions array
// How do I add arrays with a variable as a key? I don't want to
// specify the key. Someone should be able to create 10 entries,
// or 20 entries, or .. whatever count.
sessions[0] = new Array (sStartUnix);
sessions[1] = new Array (sEndUnix);
}
// Get the current time (and as UNIX)
var now = moment();
var nowUnix = now.unix();
// Loop through sessions
for (l = 0; l < sessions.length; l++) {
var session = sessions[l];
// How do I get things out of the array of timestamps?
// My current code results in session[key] being UNDEFINED?
var lastSession = session[session.length-1];
}
// Do stuff - like math, to run validations
// I know this isn't correct, but the idea will be to get
// a difference in hours
var lastNowDiff = nowUnix - lastSession;
if (lastNowDiff > 4320) {
alert('The submission date must be within 6 months.');
}
Я его running in a Fiddle, если у вас есть время, чтобы проверить это.
Спасибо @sundar, это было отличное лидерство. Я обновил свою скрипку, чтобы отразить это предложение. Используя 'session.push (новый массив (sStartMoment, sEndMoment)),' в строке 49, я смог начать помещать свои записи в нужный массив (представления). Я все еще борюсь с методом, чтобы получить различия между датами/временными метками, которые полезны. https://jsfiddle.net/jryven/ovc2f1b7/ –
Почему не удается запустить экспериментальную библиотеку, которая является замечательной библиотекой для сравнения даты и даты, а не с использованием родной даты? – sundar
У меня есть момент.js загружен. Возможно, я не использую его правильно. –