2016-03-02 12 views
8

Tôi có một đối tượng ngày mà tôi muốnDi Giây/mili giây từ ngày chuyển đổi sang ISO Chuỗi

  1. tháo miliseconds/hoặc thiết lập để 0
  2. tháo giây/hoặc thiết lập để 0
  3. chuyển đổi sang ISO chuỗi

Ví dụ:

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 

Nhưng những gì tôi thực sự muốn cuối cùng là

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

Trả lời

0

Bạn có thể sử dụng phương thức startOf() bên trong moment.js để đạt được những gì bạn muốn.

Dưới đây là một ví dụ:

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

Không cần cho một thư viện, chỉ cần thiết lập các giây và mili giây bằng không và sử dụng được xây dựng trong toISOString phương pháp:

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

Lưu ý: toISOString không được hỗ trợ bởi IE 8 trở xuống, có pollyfil on MDN.

+0

Nhưng điều này vẫn hiển thị các millis. Có cách nào để loại bỏ các millis mà không có một thư viện và không có mối nối hoặc một số loại regex? Tôi ngạc nhiên khi chúng ta không thể định dạng đối tượng ngày theo cách chúng ta muốn trong PHP. – wuno

+0

@ wuno — điều đó có tuyệt vời không? Thật không may, các đối tượng ngày ECMAScript không có hỗ trợ định dạng nào cả, hoàn toàn không có. Có [* Intl.DateTimeFormat *] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat) được hỗ trợ bởi [* Date.prototype.toLocaleString *] (https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString) cho một số trình duyệt, nhưng không rõ ràng trong việc chỉ định kết quả. Thư viện định dạng và phân tích cú pháp tốt là [* fecha.js *] (https://github.com/taylorhakes/fecha). – RobG

+0

Vâng, nó sẽ là lol. Tôi đã đi trước và sử dụng toISOString() sau đó sử dụng phương thức chuỗi con (0,19). Bạn có nghĩ rằng đó là an toàn không? Ngoài ra nếu định dạng ngày được đề xuất là như vậy, 2007-07-25T11: 46: 24 có an toàn để giả định rằng nó không cần phải là UTC không? Bởi vì rời khỏi đó sẽ chỉ để nó lên đến vị trí máy chủ để thiết lập thời gian và ngày dựa trên múi giờ của máy chủ. Tôi có đúng không? Cảm ơn bạn đã giúp đỡ! – wuno

2

Giải pháp javascript thuần túy để cắt bớt giây và mili giây (bị xóa, không chỉ được đặt thành 0). JSPerf cho biết funcion thứ hai nhanh hơn.

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

Một hơi muộn ở đây nhưng bây giờ bạn có thể:

var date = new Date();

obj này có:

date.setMilliseconds(0);

date.setSeconds(0);

sau đó gọi toISOString() như bạn làm và bạn sẽ ổn thôi.

Không có thời điểm hoặc người khác.

Các vấn đề liên quan