2015-12-02 65 views
0

我使用Javascript Date對象的toString方法如下格式的日期的Javascript日期字符串的方法不能正常工作

var firstDate ='13/11/2015 13:27:24'; 
var secondDate ='07/11/2015 13:19:45'; 

var dateDisplay1 = Date.parse(firstDate).toString("dd/MM/yyyy HH:mm"); 

OUTPUT:13/11/2015 13:27 => 11月13日是正確的

var dateDisplay2 = Date.parse(secondDate).toString("dd/MM/yyyy HH:mm"); 
11/07/2015 13:19 

OUTPUT:2015年11月7日13:19 => 7月11日是不對的,應該是11月7

預期dateDisplay2將2015年7月11日13:19

+1

缺省值是美式日期格式,用它來聲明日期日期(「2015-11-7」)或日期(「2015年11月7日」) – Jules

+2

不要使用Date.parse解析字符串,永遠不要。手動解析它們。圖書館可以提供幫助,但您必須事先知道該格式,如果您只需要處理一種格式,那麼需要兩行。 – RobG

+0

當我嘗試你的代碼時,我得到了NaN,即使是第一個:http://jsfiddle.net/gratiafide/kgstubtn/9/我認爲你將需要使用「split()」並創建一個新的Date對象從那。 – user3089840

回答

2

修訂

這裏是手工做這件事:

http://jsfiddle.net/gratiafide/kgstubtn/18/

的Javascript:

var firstDate = '13/11/2015 13:27:24'; 
var secondDate = '07/11/2015 13:19:45'; 

document.getElementById("myBtn").addEventListener("click", function() { 
    var splitHalf = firstDate.split(" "); 
    var splitCalendar = splitHalf[0].split("/"); 
    var splitMinutes = splitHalf[1].split(":"); 
    var date = splitCalendar[0] + "/" + splitCalendar[1] + "/" + splitCalendar[2] + " " + splitMinutes[0] + ":" + splitMinutes[1]; 
    document.getElementById("demo").innerHTML = date; 
}); 

HTML:

<p>Click the button to display your date formatted correctly.</p> 

<button id="myBtn">Try it</button> 

<p id="demo"></p> 
+0

獲得我的投票在盒子外思考。但是,您可以修改秒數並完成它:'date.replace(/:\ d \ d $ /,'')'。 ;-) – RobG

+0

好點,並感謝您的投票。如果你想在將來改變格式,這樣做會給你更多的選擇。 – user3089840

0

有一個空間secondDate之後。去掉它。

var dateDisplay2 = Date.parse(secondDate).toString("dd/MM/yyyy HH:mm"); 
+0

不,不要那樣做。任何標準都不需要[* Date.parse *](http://www.ecma-international.org/ecma-262/6.0/#sec-date.parse)來正確解析OP中的字符串。此外,它返回一個數字,而不是日期,因此您正在調用* Number.prototype.toString *。沒有ECMA-262標準要求[* toString *](http://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.tostring)方法採用任何參數,它完全依賴於實現所以這個論點很可能被忽略了。 – RobG

+0

@RobG是的,你是正確的 – AnNaMaLaI

-1

只需使用新的日期(字符串)和傳遞日期字符串。

感謝

2

變種dateDisplay1 = Date.parse(firstDate)的ToString( 「DD/MM/YYYY HH:MM」);

這裏有幾個問題。

解析日期字符串在很大程度上取決於實現,在遵循標準的情況下,可能會產生不一致的結果。你應該手動解析日期字符串,一個庫可以提供幫助,但是如果你只有一種格式並且確定它是一個有效的日期(見下面),那麼一個2行函數就足夠了。測試一個有效的日期只有一個額外的行。

Date.parse返回一個數,它是一個時間值,這樣Date.parse(...).toString()正在呼叫Number.prototype.toString其中傳遞的參數是一個基數。所以,如果 Date.parse返回一個合適的值,則:

new Date(Date.parse(...)).toString() 

將需要。

如果您希望以特定格式顯示日期字符串,您可以測試支持internationalization API並使用它並回退到您自己的功能(或僅使用您自己的功能),例如,

function parseDMY(s) { 
 
    var b = s.split(/\D+/); 
 
    return new Date(b[2], b[1]-1, b[0], b[3], b[4], b[5]); 
 
} 
 

 
function formatDateDMYhm(d) { 
 

 
    // Use internationalization API if available 
 
    if (typeof Intl == 'object' && typeof Intl.DateTimeFormat == 'function') { 
 
    options = { 
 
     year: 'numeric', month: '2-digit', day: '2-digit', 
 
     hour: '2-digit', minute: '2-digit', /* second: '2-digit', */ 
 
     hour12: false 
 
    }; 
 
    return d.toLocaleString('en-GB', options); 
 
    } 
 

 
    // Otherwise, use bespoke function  
 
    function z(n){return (n<10? '0':'') + n} 
 
    return z(d.getDate()) + '/' + z(d.getMonth()) + '/' + d.getFullYear() + 
 
     ' ' + z(d.getHours()) + ':' + z(d.getMinutes()); 
 
} 
 

 
var firstDate ='13/11/2015 13:27:24'; 
 
var secondDate ='07/11/2015 13:19:45'; 
 

 
document.write(formatDateDMYhm(parseDMY(firstDate)) + '<br>'); 
 
document.write(formatDateDMYhm(parseDMY(secondDate)));

雖然如果使用國際化API,它插入在某些瀏覽器的日期(例如鍍鉻),而不是其他(如IE)之後額外的逗號,所以即使使用標準不必然產生一個「標準」結果。也許它不應該在這種情況下使用。使用月份名稱更不明確,因此請考慮使用該名稱。 13-Nov-2015 13:27。

+0

啊你的答案非常相似! :) +1回到亞 – user3089840