2013-07-05 58 views
0

我有這個代碼JSFiddlejquery更改日期fromat從8601到美國標準

$(function() { 
    var datefields = $("input[type='date']"); 
    // Log starting markup 
    datefields.each(function() { 
     var $el = $(this), $parent = $el.parent(); 
     $parent.next().text($parent.html()); 

    }); 

    if (!Modernizr.inputtypes.date) { 
     datefields  
      .datepicker() 
      .each(function() { 
       // Turn ISO 8601 date string into US date string 
       var dateParts = this.value.split("-"), 
        date = $.map(dateParts, function (el) { 
         return !isNaN(parseInt(el, 10)) ? el : null; 
        }).length === 3 
         ? new Date(dateParts[0], dateParts[1], dateParts[2]) 
         : null; 
       this.type = "text"; 
       this.value = !date ? "" : 
        date.getMonth() + "/" + 
        date.getDate() + "/" + 
        date.getFullYear(); 
      }); 
    } 

    // Log final results 
    datefields.each(function() { 
     var $el = $(this), $parent = $el.parent(); 
     $parent.next().next().text($el.val()) 
     $parent.next().next().next().text($el.attr("value")); 
     $parent.next().next().next().next().text($el.prop("value")); 
     $parent.next().next().next().next().next().text(this.getAttribute("value")); 
    }); 
}); 

我無法弄清楚如何得到它的日期正確轉換爲MM/dd/yyyy格式。在2012年12月28日的日期,它爲非html5日期瀏覽器提供了0/28/2013的日期。它適用於html5瀏覽器。如果我使用正確格式的date.getmonth()...等替換日期字符串,它會正確顯示。所以我知道它與getMonth()和getFullYear()返回值有關。任何幫助,將不勝感激。

回答

1

JavaScript中的getMonth()是基於零的。您需要通過1降低價值創造時:

? new Date(dateParts[0], parseInt(dateParts[1]) - 1, dateParts[2]) 

,然後加1的值再次顯示它:

  this.value = !date ? "" : 
       (date.getMonth() + 1) + "/" + 
       date.getDate() + "/" + 
       date.getFullYear(); 

this articlegetMonth() Mozilla的開發網絡。

+0

謝謝,沒有意識到。然而,我原來的日期有一個月的12,它輸出0,所以加1仍然只有我1月,而不是預期的12月。 – Xaxum

+0

然後,您可能需要用'parseInt(dateParts [1]) - 1'來初始化Date對象的月份部分。我會更新我的答案。 –

+0

你知道你爲什麼需要做-1嗎?當我將日期部件記錄到控制檯時,我會得到每個部件的正確值。但是,當日期被創建時,它會到1月份。如果我按-1的方式指出它給出了正確的日期,但我不明白爲什麼-1需要在'12'上執行parsInt時它應該給我12而不是13。 – Xaxum