2012-08-02 111 views
1

我決定讓用戶輸入DDMMYYY來獲得他們的生日。如何從這些數據在JavaScript中創建UNIX時間戳?JavaScript從DDMMYYYY做出時間?

另外,一旦我有unix時間戳,我該如何顯示它英語,即2000年1月5日星期一?

我可以很容易地做到這一點,我只是不知道在JavaScript中的功能。

回答

-1

Date.js是一個偉大的第三方庫,將允許您分析用戶輸入的任何格式,像這樣:

沒有分隔符,它可能會有點棘手做到這一點。如果你願意來提取日,月和年Date.js提供其優雅:

var dl = new Date(2007, 0, 1); 
var unixTimeStamp = dl.valueOf()/1000; 
var customDateString = dl.toString('dddd dd MMM yyyy'); 

看到它在行動here

+0

Date.js已經維持了5年。這是錯誤的,並覆蓋了很多原生的'Date.prototype'方法,這使得在生產中使用它很危險。 – timrwood 2012-08-04 00:14:05

+0

Date.js有**糟糕的**設計問題,如上所述,並且沒有形成。此外,不鼓勵多個'var'語句。 – WhyNotHugo 2012-08-04 00:21:29

0

您可以使用子字符串來獲取Day,Month和Year,然後在javascript中創建一個新的Date對象: var ux = new Date(year,month,day).getMilliseconds/1000;

1

這對於輸入DDMMYYYY將會很棘手,因爲如果用戶遺漏了一位數字,或者沒有以前導0作爲單數的前綴,它將會丟掉整個計算。出生日期輸入的最佳(也是最流行的方式)是日期,月份和年份的3個下拉菜單。那麼這將讓你輕鬆工作的日期出一個javascript格式:

var date = new Date($('year').val(), $('month').val(), $('day').val()); 

alert(date.toDateString()); 

這將是從UX的角度更好,因爲它不允許用戶放在一個無效的日期,特別是對那些來自使用不同日期格式的語言環境的用戶。

+0

是的,我正在讀這篇文章,這是我的第一選擇,但正如有人指出的,我傾向於同意 - 它向下滾動列表並選擇三個不同的值而煩躁和煩人。每個人都可以很好地輸入數字。我的計劃是通過先在javascript中計算日期來驗證日期,並隨時更改DIV以顯示他們正在輸入的內容,然後快速仔細檢查,以確認用戶他們做得正確。 – Chud37 2012-08-02 11:08:52

+0

另一點,如果贊成這是用戶不必猜測使用什麼日期格式,並且沒有地方混淆。特別是你使用的年份最後一年(因爲DDMMYYYY和MMDDYYY都是常見的)。 – WhyNotHugo 2012-08-04 00:22:50

0

您需要使用一些圖書館,或代碼的東西你自己,因爲內置在JavaScript日期解析和編寫例程非常有限。那裏使用的格式基本上取決於系統。

我有點偏見(作爲「Going Global with JavaScript and Globalize.js」的作者),但我仍然推薦使用Globalize.js,即使在你真的不是全球化但只使用英語符號的情況下。畢竟,在日期上使用英文標記是本地化的一種形式。

例子:

<script src=globalize.js></script> 
<script> 
var birthDateString = "09Feb1952"; // just a test case 
var birthDate = 
    Globalize.parseDate(birthDateString, 'ddMMMyyyy'); 
if(!birthDate) { 
    alert('Error in birth date!'); // replace by suitable error handling 
} 
else { 
    var unixTimeStamp = Math.round(birthDate.getTime()/1000); 
    document.write(unixTimeStamp + "<br>"); 
    document.write(Globalize.format(birthDate, 'dddd d MMM yyyy')); 
} 
</script> 

這將結束與結果「星期六1952年2月9日」,這是不完全的形式要求的,所以如果你真的想要的形式,你會需要一些額外的邏輯添加後綴「th」,「st」,「nd」或「rd」。

關於UNIX時間戳與JavaScript的Date對象,看到回答以下問題How do you get a timestamp in JavaScript?

0
function dateFromStr(input) { 
    var year, month, day; 

    year = parseInt(input.substr(4,4)); 
    month = parseInt(input.substr(2,2)); 
    day = parseInt(input.substr(0,2)); 

    return new Date(year, month, day); 
} 

dateFromStr("03082012"); 

缺點:有點冗長。 優點:對於像這樣簡單的事情,無需外部依賴。