2013-05-03 9 views
0

Я анализирую XML-файл для отображения данных на своих картах Google. Все это отлично работает. У меня есть один элемент из XML, который я проанализировал под названием «expires», который является датой XML-файла в ISO 8601. У меня есть этот код для форматирования даты, которая отлично работает при вводе исходной статической даты ISO 8601 и ее вывода к моим инфобоксам через dstring.Ошибка, не определено сообщение

Это отлично подходит для форматирования, но показывает, что срок действия не определен.

function dateFromString(expires) { 

    var bits = expires.split(/[-T:+]/g); 
    var d = new Date(bits[0], bits[1]-1, bits[2]); 
    d.setHours(bits[3], bits[4], bits[5]); 

    // Get supplied time zone offset in minutes 
    var offsetMinutes = bits[6] * 60 + Number(bits[7]); 
    var sign = /\d\d-\d\d:\d\d$/.test(expires)? '-' : '+'; 

    // Apply the sign 
    offsetMinutes = 0 + (sign == '-'? -1 * offsetMinutes : offsetMinutes); 

    // Apply offset and local timezone 
    d.setMinutes(d.getMinutes() - offsetMinutes - d.getTimezoneOffset()) 

    // d is now a local time equivalent to the supplied time 
return d; 

} 

var days = ["Sun","Mon","Tues","Wed","Thur","Fri","Sat"]; 
var months =['Jan','Feb','March','April','May','June','July','Aug','Sept','Oct','Nov','Dec']; 
var ampm = " am"; 

var dt = (dateFromString(expires)); 
var yr = dt.getFullYear(); 
var mth = dt.getMonth(); // months in Javascript are 0-11 so May is month 4 
mth = months[mth]; 
var dte = dt.getDate(); 
var dy = dt.getDay(); // days are 0-6 
dy = days[dy]; 
var hrs = dt.getHours(); 
var h1 = hrs; 
var mins = dt.getMinutes(); 

if (hrs >= 12) {ampm = " pm"} 
if (hrs >= 13) {hrs = hrs - 12} 
if (h1 == 0) {hrs = 12} 

if (hrs <10) {hrs = "0" + hrs}; // if leading zero desired 
if (mins <10) {mins = "0" + mins}; 

var dtstring = dy + ", " + mth + " " + dte + ", " + yr + " at " + hrs + ":" + mins + ampm; 

Теперь, когда я вручную вводить и формат ISO 8601, как так ...

var dt = (dateFromString('2013-05-02T11:08:00-6:00')); 

форматирует его правильно с выходной вар dtstring, так что я знаю, что это работает. Но он показывает текущую дату для всех моих выходных данных естественным образом, поэтому я вручную вводил datestamp вместо определения var из проанализированного XML истекает. Мне нужно отформатировать переменную expires, которую я проанализировал из файла XML.

Вот где я застрял ...

Я не владеет Javascript и я получил это далеко с исследованием, когда я иду, чтобы определить, истекает с кодом выше я получаю истекает не определить, но, как представляется, он определен. Я могу определить его непосредственно в своих инфобоксах, и это нормально, но не тогда, когда я определяю его форматирование.

Что мне не хватает или что-то не так?

CODE EXAMPLE

+0

Я предполагаю, что вы хотите, чтобы текст внутри тега xml назывался «expires», правильно? Я думаю, что это поможет так показать немного кода, который вы используете для синтаксического анализа XML – koenpeters

+0

«он отображает текущую дату для всех моих выходных данных« Естественно? Что вы имеете в виду? –

+0

Это var dt = (dateFromString ('2013-05-02T11: 08: 00-6: 00')); жестко закодирован с этим 2013-05-02T11: 08: 00-6: 00, поэтому вывод в dtstring - это преобразованная дата для всех моих инфобокса. Данные уже проанализированы из файла XML. Я просто не знаю, как настроить var expires для преобразования. – Texan78

ответ

0

Вот пример форматирования даты ISO 8601

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date#Example.3A_ISO_8601_formatted_dates

Есть несколько подходов, которые можно использовать для форматирования даты/времени, ниже блог на таких примерах ,

Это трудно понять, что вы хотите сделать с вашей формулировкой, но, возможно, это поможет вам получить немного дальше.

Удачи.

+0

Спасибо, но мне не нужна помощь в его форматировании. Код в исходном сообщении делает это. Мне нужно знать, как определить анализируемую переменную с помощью simepleDateformat, который является кодом в исходном сообщении. Немного трудно понять, когда мои оригинальные сообщения продолжают получать соответствующую информацию, когда я трачу 30 минут на запись сообщения, пытаясь объяснить это, так как я не знаю и никогда не использовал javascript до этой недели. Затем мое сообщение получает от того, что не имеет отношения к тому, что мне нужно. – Texan78

+0

Чтобы передать в переменной expires только вызов ... var formattedExpiresVariable = dateFromString (yourExpiresVariable); правый? –

+0

То же самое, что и это право? [code] var dt = dateFromString (expires); [/ code] Если это так, как сейчас, и все еще говорит undefined и не передает его через simpleDateFormat. Я могу передать expire var непосредственно в свои инфобоксы и выводит неформатированную дату. Я могу передать необработанный формат в simpleDateFormat, как этот [code] var dt = (dateFromString ('2013-05-02T11: 08: 00-6: 00')); [/ code] и форматирует его. Как только я заменяю необработанный формат с помощью parsed expire var, он говорит undefined. Полный код находится здесь http://www.mesquiteweather.net/gmap/googlemap.js – Texan78

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