2015-06-08 14 views
9

Tôi đang sử dụng moment.js.Sử dụng "5 ngày trước (Thứ Ba)" nếu trong tuần cuối cùng trong moment.js

Giá trị mặc định cho các ngày quá khứ tương đối là "5 days ago". Nhưng những gì tôi muốn là nếu nó trong vòng một tuần trước nó sẽ trả lại "5 days ago (Tue)". Nếu nó hơn một tuần, tôi muốn thường xuyên "5 days ago".

The docs say tôi có thể cung cấp một chức năng để định dạng tùy chỉnh một điều như vậy:

moment.locale('en', { 
    relativeTime : { 
     future: "in %s", 
     past: "%s ago", 
     s: "seconds", 
     m: "a minute", 
     mm: "%d minutes", 
     h: "an hour", 
     hh: "%d hours", 
     //d: "a day", // this is the default 
     d: function(num, noSuffix, key, future) { return "a day (" + FOO + ")"; }, 
     //dd: "%d days", // this is the default 
     dd: function(num, noSuffix, key, future) { return num + "days (" + FOO + ")"; }, 
     M: "a month", 
     MM: "%d months", 
     y: "a year", 
     yy: "%d years" 
    } 
}); 

Những vấn đề là:

  • Làm thế nào để tính toán tên các ngày trong tuần cho biến FOO?
  • Nó trả về ví dụ: 5 days (Mon) ago thay vì 5 days ago (Mon)
  • Tôi muốn định dạng tùy chỉnh này chỉ khi nó < = 7 ngày (trong tuần trước)
+0

chức năng ngày 'dd' trả về' "num days (FOO)" 'vì vậy tôi giả sử bạn nhận được' previous' sau khi bạn nối nó sau khi gọi hàm. Nếu bạn muốn nó khác nhau, bạn nên xử lý sợi bị trả lại theo cách khác. – cnluzon

Trả lời

3

Bạn không thể thao tác định dạng thời gian tương đối theo cách bạn hỏi. Tuy nhiên, bạn có thể đơn giản làm so sánh chính mình để quyết định có hay không gắn thêm chuỗi.

// your source moment 
var m = moment("2015-06-04"); 

// calculate the number of whole days difference 
var d = moment().diff(m,'days'); 

// create the output string 
var s = m.fromNow() + (d >= 1 && d <= 7 ? m.format(" (ddd)") : ""); 
Các vấn đề liên quan