2014-09-30 43 views
0

由於語言環境支持,我正在使用https://github.com/abritinthebay/datejs/進行日期格式設置。但是,無法在沒有年份的情況下獲得完整的日期時間?沒有年份的語言環境特定日期

輸入日期:2014/09/20 20:00:00

輸出日期:09/20 20:00

而且它必須尊重區域設置!

+0

Javascript不提供區域設置的訪問權限。最好的圖書館可以做的就是猜測時區的中間和年底的時區偏移。有一個內置的[* Date.prototype.toLocaleString *](http://ecma-international.org/ecma-262/5.1/#sec-15.9.5。5),但輸出完全依賴於實現,並且從主機到主機的差別很大。可能最好的做法是要求用戶確定他們喜歡的格式,並記住以後使用的選擇。 – RobG 2014-09-30 12:03:17

回答

-1

格式化日期爲月/日小時:分鐘與Date.js你會打電話的toString格式爲「MM/DD HH:MM」得到兩位數的所有值,例如:

console.log(new Date().toString('MM/dd HH:mm'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>

試圖確定用戶期望看到的格式是非常有問題的,無論是被稱爲「文化」,「區域」或只是「偏愛」。 Javascript無法訪問系統設置,瀏覽器不會顯示它們。您可以嘗試基於Date.prototype.toLocaleString的輸出進行猜測,但這完全取決於實現,並不一定符合用戶首選項。

一種常見的方法是使用明確的格式,因此用戶偏好無關緊要,例如,

console.log(new Date().toString('dd-MMM HH:mm'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>

另一種方法是有一個明確的默認格式,則允許用戶從幾個支持的格式選擇和存儲的偏好。

還有內置Date.prototype.toLocaleString,這是相當不可靠的,但一些瀏覽器支持可選​​。作爲一個格式化程序,它非常普通,所以當存在能夠使這項工作變得更好的庫時,我們不能推薦它。

var options = { 
 
    month: 'short', 
 
    day : '2-digit', 
 
    hour : '2-digit', 
 
    minute:'2-digit' 
 
}; 
 

 
// Browser dependent, something like en-us: Jan 21, 8:39 AM 
 
console.log('en-us: ' + new Date().toLocaleString('en-us',options)) 
 

 
// Browser dependent, something like en-gb: 21 Jan, 08:39 
 
console.log('en-gb: ' + new Date().toLocaleString('en-gb',options))

另一種方法是寫自己的解析器和格式化已經做了你需要的東西。如果您只需要支持一種或兩種格式,則非常簡單,例如

// input format yyyy/mm/dd hh:mm:ss 
 
function parseDateString(ds) { 
 
    var d = ds.split(/\D+/); 
 
    return new Date(d[0], --d[1], d[2], d[3], d[4], d[5]); 
 
} 
 

 
// Return date string as mm/dd hh:mm 
 
function formatDate(d) { 
 
    function z(n) { 
 
    return (n < 10 ? '0' : '') + n 
 
    } 
 
    return z(d.getMonth() + 1) + '/' + z(d.getDate()) + 
 
    ' ' + z(d.getHours()) + ':' + z(d.getMinutes()); 
 
} 
 

 
console.log(formatDate(parseDateString('2014/09/20 20:00:00'))); // 09/20 20:00

所以,你可以用較少的代碼十幾行更換整個庫。 :-)

+0

我不確定這是否尊重瀏覽器區域設置,因爲此答案是硬編碼到美國的日期。作者想要的東西可以在任何國家/地區使用,就像我一樣。 – Simon 2017-01-20 17:49:34

+1

@ Simon - 除了通過地理定位(這是不可靠的)之外,您無法檢測到用戶的區域設置,並且不一定告訴您用戶的格式預計日期。你是對的,但這不是一個好的答案。希望更新使它更好。也許我應該只是說「*不要試圖確定用戶的位置,並使用它來格式化日期,使用明確的格式,如'20 -Jan-2016',而不是*」。 – RobG 2017-01-20 22:40:18

+0

認爲你的最後一句話對我來說是一個可以接受的答案。 – Simon 2017-07-30 17:03:35

0
console.log(new Date().toLocaleString('en-En',{weekday: "long", month: "long", day: "numeric"})) 

您可以根據需要更改此選項。

相關問題