2016-01-08 2 views
1

Я работаю над последующим вопросом к одному, который я опубликовал 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, если у вас есть время, чтобы проверить это.

ответ

1

Использовать метод push массива.

Пример:

var entries = new Array(); 
entries.push(new Array(1, 1, 2016, "9:00", "am", "5:00", "pm")); 

Вы можете добавить любое количество массивов, как это.

Полная Fiddle: https://jsfiddle.net/jryven/ovc2f1b7/

+0

Спасибо @sundar, это было отличное лидерство. Я обновил свою скрипку, чтобы отразить это предложение. Используя 'session.push (новый массив (sStartMoment, sEndMoment)),' в строке 49, я смог начать помещать свои записи в нужный массив (представления). Я все еще борюсь с методом, чтобы получить различия между датами/временными метками, которые полезны. https://jsfiddle.net/jryven/ovc2f1b7/ –

+0

Почему не удается запустить экспериментальную библиотеку, которая является замечательной библиотекой для сравнения даты и даты, а не с использованием родной даты? – sundar

+0

У меня есть момент.js загружен. Возможно, я не использую его правильно. –

0

Используйте JavaScript Date объект для синтаксического анализа и проверки.

Смежные вопросы