2012-05-03 49 views
28

可能重複一個 「日/月/年」 或 「DD-MM-YYYY」 或 「日 - 月 - 年」 格式的日期字符串:
Extending JavaScript's Date.parse to allow for DD/MM/YYYY (non-US formatted dates)?
Convert dd-mm-yyyy string to date如何解析使用JavaScript或jQuery的

進入在文本框的日期,例如:1985年5月9日,我想將其轉換爲05九月1985(DD-MMM-YYYY)格式。我將如何實現這一目標?請注意,源格式可能是dd-mm-yyyydd/mm/yyyydd-mmm-yyyy格式。

代碼段:

function GetDateFormat(controlName) { 
     if ($('#' + controlName).val() != "") {  
      var d1 = Date.parse($('#' + controlName).val()); 
      if (d1 == null) { 
       alert('Date Invalid.'); 
       $('#' + controlName).val(""); 
      } 
       var array = d1.toString('dd-MMM-yyyy'); 
       $('#' + controlName).val(array); 
     } 
    } 

此代碼返回09月 - 1985年但我想05月 - 1985年。謝謝。

回答

39

你可能想使用助手庫像http://momentjs.com/包裝了本地JavaScript

var day = moment("12-25-1995", "MM-DD-YYYY"); 
:爲了方便操作

然後,你可以做這樣的事情約會對象

var day = moment("25/12/1995", "DD/MM/YYYY"); 

然後在日期操作

day.add('days', 7) 

,並獲取JavaScript日期

day.toDate(); 
31

更新

下面你說過:

對不起,我不能預測之前的日期格式,它應該像DD-MM-yyyy或DD/MM/YYYY或dd-mmm-yyyy格式最後我想將所有這種格式轉換爲dd-MMM-yyyy格式。

完全改變的問題。如果你無法控制格式,它將變得更加複雜。 JavaScript中沒有任何內容可以讓你指定日期格式。正式的,JavaScript支持的唯一日期格式是simplified version of ISO-8601yyyy-mm-dd,儘管實際上幾乎所有的瀏覽器也支持yyyy/mm/dd。但除此之外,你必須自己編寫代碼或(更有意義)使用一個好的庫。我可能會使用像moment.jsDateJS這樣的庫(儘管DateJS在幾年內還沒有被維護)。


原來的答覆

如果格式總是dd/mm/yyyy,那麼這很簡單:

var parts = str.split("/"); 
var dt = new Date(parseInt(parts[2], 10), 
        parseInt(parts[1], 10) - 1, 
        parseInt(parts[0], 10)); 

split拆分給定的分隔符的字符串。然後我們使用parseInt將字符串轉換爲數字,我們使用new Date構造函數從這些部分構建一個Date:第三部分將是年份,第二部分本月和第一部分。 Date使用從零開始的月份數字,所以我們必須從月份數字中減去一個。

+0

對不起,我不能預測之前的日期格式的本地,它應該是像dd-mm-yyyy或dd/mm/yyyy或dd-mmm-yyyy格式,最後我想將所有格式轉換爲dd-MMM-yyyy格式。 –

+0

@SharanammaJekeen:完全**改變了這個問題。查看更新。 –

+0

我會將我的源格式修正爲dd/mm/yyyy格式。 –

7

Date.parse只識別特定格式,而您沒有告訴它輸入格式的選項。在這種情況下,它認爲輸入格式爲mm/dd/yyyy,所以結果是錯誤的。

要解決這個問題,你需要或者自己分析輸入(例如用String.split),然後manually construct一個Date對象,或使用功能更齊全的圖書館,如datejs

實施例用於手動解析:

var input = $('#' + controlName).val(); 
var parts = str.split("/"); 
var d1 = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0])); 

實施例使用date.js:

var input = $('#' + controlName).val(); 
var d1 = Date.parseExact(input, "d/M/yyyy"); 
+0

那麼我怎樣才能達到上述格式? –

+0

@SharanammaJekeen:我不確定你的意思是... – Jon

+1

date.js很方便! – yorkw

2

嘗試這種情況:

function GetDateFormat(controlName) { 
     if ($('#' + controlName).val() != "") {  
      var d1 = Date.parse($('#' + controlName).val().toString().replace(/([0-9]+)\/([0-9]+)/,'$2/$1')); 
      if (d1 == null) { 
       alert('Date Invalid.'); 
       $('#' + controlName).val(""); 
      } 
       var array = d1.toString('dd-MMM-yyyy'); 
       $('#' + controlName).val(array); 
     } 
    } 

正則表達式替換.replace(/([0-9]+)\/([0-9]+)/,'$2/$1')改變日/月位置。

+0

'RegEx'的好用法。 –

0

看到這個

你可以做任何事情的日期。

文件:http://stevenlevithan.com/assets/misc/date.format.js

使用腳本標記添加到您的HTML代碼,並使用您可以使用它作爲:

var now = new Date(); 

now.format("m/dd/yy"); 
// Returns, e.g., 6/09/07 
+0

http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

+1

請添加評論 - 投票,以便至少我可以知道我的錯誤 –

+0

我想,這是因爲OP詢問了如何將通過的日期劃分爲「dd/mm/yyyy」形式,而您的回答似乎是關於如何格式化當前日期 - 也許? –

相關問題