2016-10-04 115 views
0

我有一個字符串變量"PublishDate",然後當我檢查使用"PublishDate.value"值返回像的Javascript:全月將字符串轉換爲日期對象

"October 04, 2016 9:28 AM"

一個字符串,我需要將其轉換爲一個日期被格式化像"10/04/2016"

對象我不知道這是如何做到的javascript:

var d = new Date("October 04, 2016 9:28 AM"); 
var date = d.getDate(); 
var month = d.getMonth(); 
var year = d.getFullYear(); 
var hours = d.getHours(); 
var min = d.getMinutes(); //10/04/2016 
console.log(month+1+'/'+date+'/'+year); 
+0

要麼你有個約會對象,或者您有字符串'「2016年10月4日」',你不能在同一時間*兼得(但你可以有都在不同的變量)* – adeneo

+0

你做了什麼研究,你有什麼嘗試?在搜索引擎中使用此問題中的關鍵字會產生很多結果 – charlietfl

+0

只需解析字符串並自己創建日期對象。 –

回答

1

首先,con使用Date constructor是用vert日期字符串爲Date對象:

var d = new Date(PublishDate.value); 

編輯:始終考慮您的格式可能不被瀏覽器支持的情況下。在Firefox的情況下,MDN指出,它將支持certain date formats

該字符串應該是由Date.parse()方法 (符合IETF-RFC 2822個時間戳,也是一個版本的識別的格式ISO8601)。

IE's MSDN Javascript reference還說:

它首先試圖通過使用ISO Date Format解析日期字符串。如果 日期字符串不是ISO格式,JavaScript會嘗試使用其他Other Date Formats解析日期 。

此外,認爲MDN本身不鼓勵使用構造函數或Date.parse()解析字符串日期,即​​使它適用於您的具體情況:

注:解析日期字符串與日期構造(和 Date.parse,它們是等效的)由於 瀏覽器的差異和不一致而被強烈阻止。

如果您需要支持其他品種的日期格式或各種瀏覽器,你也可以考慮Momtent.js JavaScript庫或@ RobG的和@ adeneo的回答與正則表達式做自己的分析,等等。


然後,你需要提取你想要的(月,日,年)的部分,並用斜槓作爲分隔符將它們連接起來的一個字符串,像@ user3254198的答案或@Steeve Pitis的回答是:

d.getDate() + '/' 
    + (d.getMonth() + 1) + '/' 
    + d.getFullYear() 

請記住,PublishDate.value.getMonth()方法返回月份的基於零的月份數字表示形式,因此如果您想要1-12個值,請向其中添加一個+1

隨意問任何進一步!祝你好運。

+0

真的,您的瀏覽器輸出日期對象時的格式? Mine會輸出UTC日期,如'2016-10-04T09:28:00.000Z'等? – adeneo

+0

是的!減去GMT部分:'console.log(new Date()。toString());'在我的瀏覽器中打印Tue Oct 04 2016 10:36:13 GMT-0600'。 –

+0

這還沒有接近'2016年10月4日上午9時28分' – adeneo

0

在SO上有很多這樣的問題...下次嘗試搜索一下。

var date = new Date(PublishDate.value); 
console.log((date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear()); 
+0

解析OP日期格式完全取決於實現,可能會返回正確的日期,錯誤的日期或無效的日期。編寫一個簡單的函數或使用可用的許多解析器之一。 – RobG

1

// Example PublishDate result 
 
var PublishDate = { 
 
    value: 'October 04, 2016 9:28 AM' 
 
}; 
 

 
// convert "date string" into "date object" 
 
var date = new Date(PublishDate.value); 
 

 
// build required "date string" 
 
var dateShort = (date.getMonth() +1) + '/' 
 
    + date.getDate() + '/' 
 
    + date.getFullYear(); 
 

 
// console log to show result 
 
console.log(dateShort);

+0

需要在'date.getMonth()'部分添加一個'+ 1',因爲該方法返回一個基於零的月份編號,因此它正在打印 10/4/2016而不是9/04/2016 –

+0

啊對了我修復,現在感謝讓我現在 – user3254198

2

使用幾個月得到的數值,然後就分析它的數組,但是你會喜歡

var months = [ 
 
\t "January", 
 
\t "February", 
 
\t "March", 
 
\t "April", 
 
    \t "May", 
 
    \t "June", 
 
\t "July", 
 
    \t "August", 
 
    \t "September", 
 
\t "October", 
 
\t "November", 
 
\t "December" 
 
]; 
 

 
function pad(n) { return n<10?'0'+n:n } 
 

 
var PublishDate = { 
 
\t value : "October 04, 2016 9:28 AM" 
 
} 
 

 
var parts = PublishDate.value.split(/[\s\,\:]+/); 
 
var year = +parts[2]; 
 
var month = months.indexOf(parts[0]); 
 
var day = +parts[1]; 
 

 
var date = new Date(year, month, day);     // date object 
 
var str = pad(month+1) + '/' + pad(day) + '/' + year; // the string "10/04/2016" 
 

 
console.log(date); 
 
console.log(str);
.as-console-wrapper {top : 0}

+0

哇實際上有一個更簡單的方法^^'新日期(「2016年10月04日上午9時28分」)'工作正常^^ –

+0

@SteevePitis - 對你有好處,但它不是有效的ISO 8601日期,引擎是否能夠解析它,將取決於實現,並且根本不能保證。 – adeneo

1

使用Date構造函數解析像「2016年10月4日上午9點28分」的字符串完全取決於實現,可能會導致錯誤的日期或無效的日期,所以要麼使用解析器(有很多好的解析器)或者自己編寫一個小函數來解析字符串。

但是,如果你只是想重新格式化它,那麼根本不需要解析到日期,只需重新格式化字符串。例如。

/* Reformat a string like October 04, 2016 9:28 AM to m/d/y format 
 
** @param {string} s - string in format MMMM DD, YYYY h:mm ap 
 
** @returns {string} reformatted date in MM/DD/YYYY format 
 
*/ 
 
function reformatDate(s) { 
 
    var months = {jan:'01',feb:'02',mar:'03',apr:'04', may:'05',jun:'06', 
 
       jul:'07',aug:'08',sep:'09',oct:'10',nov:'11',dec:'12'}; 
 
    var b = s.match(/\w+/g) || []; 
 
    return months[b[0].toLowerCase().substr(0,3)] + '/' + b[1] + '/' + b[2]; 
 
} 
 

 
console.log(reformatDate('October 04, 2016 9:28 AM')); 
 
      

相關問題