由於語言環境支持,我正在使用https://github.com/abritinthebay/datejs/進行日期格式設置。但是,無法在沒有年份的情況下獲得完整的日期時間?沒有年份的語言環境特定日期
例
輸入日期:2014/09/20 20:00:00
輸出日期:09/20 20:00
而且它必須尊重區域設置!
由於語言環境支持,我正在使用https://github.com/abritinthebay/datejs/進行日期格式設置。但是,無法在沒有年份的情況下獲得完整的日期時間?沒有年份的語言環境特定日期
例
輸入日期:2014/09/20 20:00:00
輸出日期:09/20 20:00
而且它必須尊重區域設置!
格式化日期爲月/日小時:分鐘與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
所以,你可以用較少的代碼十幾行更換整個庫。 :-)
我不確定這是否尊重瀏覽器區域設置,因爲此答案是硬編碼到美國的日期。作者想要的東西可以在任何國家/地區使用,就像我一樣。 – Simon 2017-01-20 17:49:34
@ Simon - 除了通過地理定位(這是不可靠的)之外,您無法檢測到用戶的區域設置,並且不一定告訴您用戶的格式預計日期。你是對的,但這不是一個好的答案。希望更新使它更好。也許我應該只是說「*不要試圖確定用戶的位置,並使用它來格式化日期,使用明確的格式,如'20 -Jan-2016',而不是*」。 – RobG 2017-01-20 22:40:18
認爲你的最後一句話對我來說是一個可以接受的答案。 – Simon 2017-07-30 17:03:35
console.log(new Date().toLocaleString('en-En',{weekday: "long", month: "long", day: "numeric"}))
您可以根據需要更改此選項。
Javascript不提供區域設置的訪問權限。最好的圖書館可以做的就是猜測時區的中間和年底的時區偏移。有一個內置的[* Date.prototype.toLocaleString *](http://ecma-international.org/ecma-262/5.1/#sec-15.9.5。5),但輸出完全依賴於實現,並且從主機到主機的差別很大。可能最好的做法是要求用戶確定他們喜歡的格式,並記住以後使用的選擇。 – RobG 2014-09-30 12:03:17