2016-03-02 399 views
8

我有,我想日期從刪除秒/毫秒轉換爲ISO字符串

  1. 約會對象刪除毫秒/或設置爲0
  2. 取出秒/或設置爲0
  3. 轉換爲ISO串

例如:

var date = new Date(); 
//Wed Mar 02 2016 16:54:13 GMT-0500 (EST) 

var stringDate = moment(date).toISOString(); 
//2016-03-02T21:54:13.537Z 

但我真正想要的到底是

stringDate = '2016-03-02T21:54:00.000Z' 

回答

0

你可以使用moment.js中的startOf()方法來實現你想要的。

下面是一個例子:

var date = new Date(); 
 

 
var stringDateFull = moment(date).toISOString(); 
 
var stringDateMinuteStart = moment(date).startOf("minute").toISOString(); 
 

 
$("#fullDate").text(stringDateFull); 
 
$("#startOfMinute").text(stringDateMinuteStart);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.js"></script> 
 
<p>Full date: <span id="fullDate"></span></p> 
 
<p>Date with cleared out seconds: <span id="startOfMinute"></span></p>

16

沒有必要的庫,只需將秒和毫秒設置爲零,並使用內置toISOString方法:

var d = new Date(); 
 
d.setSeconds(0,0); 
 
document.write(d.toISOString());

說明:toISOString不支持IE 8及更低版本,有pollyfil on MDN

+0

但這仍然顯示millis。沒有圖書館,沒有拼接或某種類型的正則表達式,沒有辦法去除毫米數據嗎?我很驚訝,我們不能僅僅像PHP那樣格式化日期對象。 – wuno

+0

@ wuno-不會很棒嗎?不幸的是ECMAScript Date對象根本沒有格式支持,絕對沒有。 [* Date.prototype.toLocaleString *]支持[* Intl.DateTimeFormat *](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat)(https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString)對於某些瀏覽器,但是在指定結果時並不明確。一個好的解析和格式化庫是[* fecha.js *](https://github.com/taylorhakes/fecha)。 – RobG

+0

是的,它會是大聲笑。我繼續使用toSOString(),然後使用子字符串(0,19)方法。你認爲這是安全的嗎?另外如果日期建議的格式是這樣的,2007-07-25T11:46:24是否可以安全地假設它不需要是UTC?因爲將它留在服務器位置可以根據服務器的時區設置時間和日期。我對麼?謝謝你的幫助! – wuno

2

純JavaScript解決方案修剪秒和毫秒(即刪除,而不是設置爲0)。 JSPerf說第二個功能更快。

function getISOStringWithoutSecsAndMillisecs1(date) { 
 
    const dateAndTime = date.toISOString().split('T') 
 
    const time = dateAndTime[1].split(':') 
 
    
 
    return dateAndTime[0]+'T'+time[0]+':'+time[1] 
 
} 
 

 
console.log(getISOStringWithoutSecsAndMillisecs1(new Date()))


 
function getISOStringWithoutSecsAndMillisecs2(date) { 
 
    const dStr = date.toISOString() 
 
    
 
    return dStr.substring(0, dStr.indexOf(':', dStr.indexOf(':')+1)) 
 
} 
 

 
console.log(getISOStringWithoutSecsAndMillisecs2(new Date()))

0

有點晚了這裏,但現在你可以:

var date = new Date();

這個OBJ具有:

date.setMilliseconds(0);

date.setSeconds(0);

然後調用toISOString()爲你做,你會被罰款。

沒有時間或其他代表。