2016-09-14 87 views
1

我試圖將MM/DD/YYYY日期轉換爲長日期。因此,例如,02/12/2013將轉換爲類似Tuesday February 12 2013將MM/DD/YYYY日期轉換爲月日年

我看過MomentJS和其他JS方法,但沒有真正做我想要的東西。或者至少,我不這麼認爲。

有沒有辦法讓這個日期轉換準確?

+0

想要使用'moment.js'還是隻想純粹的javascript? – Mohammad

+0

'有點像'或'準確'嗎? – Xotic750

回答

2

使用moment.js,

你可以做它像JavaScript這樣的日期對象

var date = new Date(2013, 1, 12); 
 
console.log(moment(date).format('dddd MMMM D Y'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>

如果你想一個日期字符串轉換爲長日期格式字符串,你可以不喜歡這樣。

var longDateStr = moment('02/12/2013', 'M/D/Y').format('dddd MMMM D Y'); 
 
console.log(longDateStr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>

+0

這很好用!感謝格式幫助! – SteveV

2

隨着moment.js這是相當簡單:

console.log(moment('02/12/2013', 'MM/DD/YYYY').format('dddd MMMM D Y'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>

-1

使用時刻,

moment().format('dddd MMMM Do YYYY'); 

momentJS的主頁上,你可以看到所有的列表可能的日期格式(http://momentjs.com/)。

Do增加了「第n」的日期,使其D只能有一個顯示號碼,但由於您選擇寫的所有文字,它能夠更好地使用「第n個」

0

您可以使用普通的JavaScript日期的方法類似的東西:

var date = new Date("01/01/2000") 
date.toDateString() //"Sat Jan 01 2000" 
+1

OP不要求「類似的東西」。 –

+1

「...因此,例如,2013年12月2日將轉換爲2013年2月12日星期二的SOMETHING LIKE。」 另外一個快速的String.replace()可以修復格式而不需要外部庫 – StackOverMySoul

+0

不推薦使用Date構造函數(或Date.parse)解析字符串,因爲它主要依賴於實現並且不可靠。 – RobG

0

FullJS:

function mydate(date) 
{ 
    var 
    month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], 
    days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] 
    ; 
    return days[date.getDay()]+' '+month[date.getMonth()]+' '+date.getDate()+' '+date.getFullYear() 
} 

console.log(mydate(new Date())); 

參考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

0

如果你不想讓你可以使用Date任何其他腳本和某些陣列

var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; 
 
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; 
 
var now = new Date('02/12/2013'); 
 
console.log(days[now.getDay()] + ' ' + months[now.getMonth()] + ' ' + now.getDate() + ' ' + now.getFullYear()); //Tuesday February 12 2013

1

在一個現代的瀏覽器可以使用Intl API

的國際對象是ECMAScript的 國際化API的命名空間,它提供了語言敏感字符串 相比,數量格式和日期和時間格式。Collat​​or,NumberFormat和DateTimeFormat對象 的構造函數是Intl對象的屬性。

解析手動地執行,Date.parse

不建議使用Date.parse作爲直到ES5, 串的解析是完全依賴於實現的。在不同的主機解析日期字符串方面仍有許多差異,因此應該手動解析日期 字符串(如果要容納多個不同的格式,庫可以提供幫助)。

Date.UTC用於爲Intl.DateTimeFormat#format提供parts的日期。

的Date.UTC()方法接受相同的參數爲最長形式構造的 ,並返回毫秒數在一個日期 對象自00:00:00 1970年1月1日,通用時間

最後,的從en-US格式化的字符串中刪除,以便它符合您的要求。

const parts = '02/12/2013'.split('/'); 
 
parts.unshift(parts.pop()); 
 
parts[1] -= 1; 
 
const dateString = new Intl.DateTimeFormat('en-US', { 
 
    weekday: 'long', 
 
    year: 'numeric', 
 
    month: 'long', 
 
    day: 'numeric', 
 
    timeZone: 'UTC' 
 
}).format(Date.UTC(...parts)).replace(/,/g, ''); 
 
console.log(dateString);

+0

並非所有當前瀏覽器[*支持Intl對象*](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl#Browser_compatibility)(移動支持特別差),也不是目前使用的許多瀏覽器。 – RobG

+0

除Safari之外的所有主流瀏覽器都支持它的基本實現,我不知道的移動設備,但與ES5,ES6和ES7一樣,它有一個填充/填充,但我從未測試過。 https://github.com/andyearnshaw/Intl.js/就像一切,支持會變得更好。我不知道transpilers是否支持它。 – Xotic750

0

我覺得有一些簡單的方法來做到這一點。

function getData(){ 
    var d = new Date("02/12/2013"); 
    var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }; 
    var n = d.toLocaleDateString('en-US',options); 
    var t = d.toLocaleTimeString('en-GB') 
    var replase = n.replace(new RegExp(',', 'g'),' ') 
    document.getElementById("demo").innerHTML = replase 
} 
相關問題