2017-04-12 27 views
0

我正在嘗試確定用戶區域設置的日期格式,以便日後可以使用它以特定格式顯示日期。如何使用javascript確定用戶區域日期格式(格式爲dd/mm或mm/dd)?

我知道我可以使用toLocaleDateString()來獲取日期格式。

比方說,我得到了1/2/2017。如何確定這是dd/mm格式還是mm/dd格式?

我試過的一件事是我可以從new Date()得到當前日期和月份,並根據(手動)檢查。當日期是2/2/20163/3/2016如何確定哪一個是日期,哪一個是月份?

有沒有解決任何人有這個問題?我也看過moment.js。如果有一些可用的解決方案,我也很樂意使用它。

+0

你有沒有使用考慮時刻['localeData'](http://momentjs.com/docs/#/i18n/locale-data/)?你的問題類似於[這一個](http://stackoverflow.com/q/42437261/4131048)? – VincenzoC

+0

瀏覽器的* toLocaleString *返回的默認格式和用戶通常用於日期的格式是兩個完全不同的東西。幾乎所有瀏覽器默認都使用US格式。他們不能可靠地尊重* toLocaleString *的用戶偏好。最好的解決方案是使用明確的格式,例如使用該月份的名稱或縮寫。 – RobG

+0

對此,已經有[*許多問題*](http://stackoverflow.com/search?q= [javascript] + get + local + date + format),至少有一個是重複的?例如。 [*如何獲得本地日期/時間格式*](http://stackoverflow.com/questions/17647644/how-to-get-local-date-time-format?s=1|3.3068),[*如何獲取客戶端系統本地日期和時間格式*](http://stackoverflow.com/questions/31679141/how-to-get-client-system-local-date-and-time-format?s=2|1.6050)。 – RobG

回答

2

使用時刻localeData你可以得到本地化longDateFormat。這將爲您提供年,月,日的本地化格式。您可以將此值用於parse您的輸入字符串區域識別。

這裏一個活生生的例子:

// Get user locale 
 
var locale = window.navigator.userLanguage || window.navigator.language; 
 
// Set locale to moment 
 
moment.locale(locale); 
 

 
// Get locale data 
 
var localeData = moment.localeData(); 
 
var format = localeData.longDateFormat('L'); 
 

 
var m1 = moment('2/2/2016', format); 
 
console.log(m1.format()); // February 2nd 2016 
 
console.log(m1.format(format) + ' using format: ' + format); 
 

 
var m2 = moment('5/1/2017', format); 
 
console.log(m2.format()); 
 
console.log(m2.format(format) + ' using format: ' + format); 
 
// January 5th 2017 for locales that use DD/MM/YYYY 
 
// May 1st 2017 for locales that use MM/DD/YYYY
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>

此代碼將不使用的格式語言環境工作與年份(例如YYYY.MM.DD.匈牙利區域)開始

+0

您的示例應使用易混淆的日期,例如5/1/2017。 2/2/2016是2月2日,無論哪個值是月份,哪天是。 ;-) – RobG

+0

@VincenzoC這不是幫助我實現我想要的。 :( – Shrabanee

+0

我編輯了我的答案,並添加了@RobG建議的另一個示例,希望通過這種方式,我的答案更加清晰:Shrabanee對不起,您沒有找到我的答案有用,請嘗試解釋原因。鏈接的問題可能會有所幫助,您可以詳細瞭解您的要求嗎? – VincenzoC

0

您可以將選項參數傳遞給toLocaleDateString以根據需要獲取日期。

var date = new Date(); 
 
var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }; 
 
console.log(date.toLocaleDateString('en',options));

+0

請正確地閱讀問題。這個輸出不是我想要確定的。 – Shrabanee

+0

當然,我確實讀過它。但是,您必須根據您獲得的輸出來驗證日期。給定字符串中月份的索引將決定日期格式。否則使用正則表達式來驗證只有一種格式將有助於麻煩。 – Ozan

+0

正如我問我的問題,說我有'2/2/2016'。現在根據您的答案,我將於2016年2月2日收到。我將如何檢查它是以'dd/mm'格式還是'mm/dd'格式? 對於像'3/2/2016'這樣的日期,我可以確定格式。 – Shrabanee