2013-01-11 38 views
1

我輸入的日期是用於例如將文本輸入字符串中的日期轉換爲其他格式javascript

var startDate = "January 16, 2013" 

從較舊的帖子我試圖鑽進去,我知道我可能需要使用date.js從http://www.javascripttoolbox.com/lib/date/documentation.php

所以我在我的HTML額外的線路火起來

<script src="http://prestigeswimming.com/wp-content/plugins/cred-frontend-editor/date.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    var startDate = "January 16, 2013" 
    alert(startDate.getMonthName()); 
</script> 

我應該這樣做,讓一個警告框說「一月」?

+0

旁註的創造者:Date.js尚未保持多年,並有一對夫婦在午夜解析錯誤。你可能會看[Moment.js](http://momentjs.com/)。 –

+0

@EmersonF,如果您在輸入時能夠更改日期格式,則應確保遵循以下規範:http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15 –

回答

-1

沒有必要使用庫:

var startDate = "January 16, 2013"; 
var d = new Date(startDate); 
var month = d.getMonth() + 1; 
var day = d.getDate(); 
var year = d.getFullYear(); 

alert(month + "-" + day + "-" + year); 

http://jsfiddle.net/mPBSf/

下面將您的日期格式轉換成有效的ECMAScript日期格式:

var startDate = "ApRiL 16, 2013"; 
var noCommas = startDate.replace(/\,/g,''); 
var withDashes = noCommas.replace(/ /g,"-"); 

function monthsToNumbers(date) 
{ 
    var months = ["january","february","march","april","may","june","july","august","september","october","november","december"]; 
    var year; 

    date = date.toLowerCase(); 

    for(var i = 0; i < months.length; i++) 
    { 
    if(date.indexOf(months[i]) != -1) 
    { 
     if(i+1 < 10) 
     date = date.replace(months[i],"0" + (i+1)); 
     else 
     date = date.replace(months[i],i+1); 
    } 
    } 

    year = date.match(/\d{4}/); 
    date = date.replace(year, ""); 
    date = year + "-" + date; 
    date = date.substring(0,date.length-1); 

    return date; 
} 

var d = new Date(monthsToNumbers(withDashes)); 
var month = d.getMonth() + 1; 
var day = d.getDate(); 
var year = d.getFullYear(); 

alert(d); 

http://jsfiddle.net/kWzSv/1/

+0

你依靠'Date'構造函數能夠解析該日期,但日期不是格式[由標準記錄](http://www.ecma -international.org/ecma-262/5.1/#sec-15.9.1.15)。所以它可能適用於你的特定瀏覽器的JavaScript引擎,在你的特定語言環境中,但它不是你可以依賴的東西。 –

+0

經過測試,並在FF 17,IE 7,8,9,10,Chrome 24 ... –

+0

@ Alex中工作正常:再次:**在您的區域**中。你用法語區域測試了嗎?越南?使用無證的功能,當你有選擇時,這不是一個好主意。 –

2

嘗試該行的這個新版本:

var startDate = Date.parseString("January 16, 2013"); 

爲了使用,你必須使用日期()對象的庫。

parseString是該對象上的一個函數,它返回一個Date對象。

+0

@TJCrowder - 這不是這個文檔頁面似乎說的,在那裏搜索parseString => http://www.javascripttoolbox.com/lib/date/documentation.php。我承認,我沒有測試它。 – Hogan

+0

@ Hogan:它必須是不同的DateJS庫! (這個名字是通用的,呃?) –

0

如果你只處理美國的區域da如果需要將任意字符串輸入解析爲日期,則還可以檢出Sherlock.js以將該字符串解析爲Date對象。然後,獲取月份名稱,只需在Javascript中操作:

var Sherlocked = Sherlock.parse('January 16'); 
var month = Sherlocked.startDate.getMonth(); 
var months = ["January","February","March","April","May","June","July","August","September","October","November","December"]; 
alert(months[month]); 

Sherlock.js不會解析年份。如果你需要這方面的支持,你可以使用Sherlock的預處理器系統自行解析年。

披露:我Sherlock.js

相關問題