簡體   English   中英

使用Angular js獲取系統日期格式

[英]Get system date format using Angular js

我想使用Angular js獲取系統日期格式。 用戶可能選擇它為dd / mm / YYYY,dd / mm / yy ......等等,它可以是用戶在他/她的計算機上選擇的任何日期格式。 是否有可能獲得日期格式?

- 編輯 -

我沒有像12/12/2016,2016年12月10日這樣的日期值...等等這個日期值我也需要從用戶的系統中選擇與用戶選擇的格式相同的格式。

我認為你只能使用Javascript找不到他/她的計算機日期格式。 如果您在后端使用某種動態語言,則應嘗試以這種方式檢索時間格式。

我想你可以查看Mozilla MDN,但我相信JS無法獲得這些信息,因為JS依賴於瀏覽器API。 因此,如果瀏覽器API提供了那么它就可以了,否則使用任何框架,如.Net或Java等。

不是完全證明的解決方案,但可以作為參考使用,您可以添加對新格式的支持。

邏輯

  • 為每年存在的特定日期創建日期對象。 喜歡:2016年12月31日
  • 現在搜索第一個非字母數字字符。 這是你的分隔符。
  • 既然你有3個部分,你可以通過比較3131來輕松找到dd
  • 即使是年份也很容易,因為它可以有2個值, 162016
  • 月份可能很棘手。 它可以有12DecDecember 為此,您可以進行2次檢查。 如果數字等於12,則為mm 如果不是數字和長度是3,則其mmm mmmm

現在你可以創建var d = new Date('2016/12/31')並將d.toLocaleDateString()傳遞給下面的函數。

 function getDateFormat(dateStr) { var delimiter = dateStr.match(/[^0-9a-z]/i)[0]; var dateParts = dateStr.split(delimiter); var r = dateParts.map(function(d, i) { if (d == 31) { return "dd" } else if (!isNaN(d) && (d == 2016 || (d + 2000) == 2016)) { return d.toString().length === 4 ? "YYYY" : "yy" } else if (d == 12) { return "mm" } else if (isNaN(d)) { var _t = d.replace(/[^az]/gi, '') return _t.length === 3 ? "mmm" : "mmmm" } }); return r.join(delimiter); } Date.prototype.getSystemDateFormat = function(){ return getDateFormat(new Date('2016/12/31').toLocaleDateString()); } //or Date.prototype.SYSTEM_FORMAT = (function(){ return getDateFormat(new Date('2016/12/31').toLocaleDateString()); })() console.log(new Date().getSystemDateFormat()) console.log(new Date().SYSTEM_FORMAT) var d1 = "12/31/2016" console.log(getDateFormat(d1)) d1 = "31/12/2016" console.log(getDateFormat(d1)) d1 = "31 December 2016" console.log(getDateFormat(d1)) d1 = "31 Dec. 2016" console.log(getDateFormat(d1)) d1 = "31-12-2016" console.log(getDateFormat(d1)) d1 = "31.12.2016" console.log(getDateFormat(d1)) 

您還可以向date.prototype添加函數以直接獲取值,而不是每次都調用它,

Date.prototype.getSystemDateFormat = function(){
  return getDateFormat(new Date('2016/12/31').toLocaleDateString());
}
//or
Date.prototype.SYSTEM_FORMAT = (function(){
  return getDateFormat(new Date('2016/12/31').toLocaleDateString());
})()

編輯1

正如@ RobG正確指出的那樣, date.toLocaleStringdate.toLocaleDateString在所有瀏覽器中都不一致 <IE11不支持它們。 所以這不是一個可靠的答案。 您可以使用它作為參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM