Câu trả lời:
Bạn cũng có thể làm điều này để lấy ngày hôm nay, ngày mai và ngày hôm qua
let today = moment();
let tomorrow = moment().add(1,'days');
let yesterday = moment().add(-1, 'days');
new Date()
để tránh cảnh báo mà lib liên tục đưa cho tôi (xem momentjs.com/docs/#/parsing/now )
new Date()
bắt buộc? Tôi nghĩ vẫn moment()
tạo ra một ví dụ về khoảnh khắc bằng cách sử dụng ngày hôm nay
Bạn có thể tùy chỉnh cách mà cả phương thức .fromNow
và .calendar
phương thức hiển thị ngày tháng bằng cách sử dụng moment.updateLocale
. Đoạn mã sau sẽ thay đổi cách .calendar
hiển thị theo câu hỏi:
moment.updateLocale('en', {
calendar : {
lastDay : '[Yesterday]',
sameDay : '[Today]',
nextDay : '[Tomorrow]',
lastWeek : '[Last] dddd',
nextWeek : '[Next] dddd',
sameElse : 'L'
}
});
Dựa trên câu hỏi, có vẻ như .calendar
phương pháp sẽ phù hợp hơn - .fromNow
muốn có tiền tố / hậu tố trong quá khứ / hiện tại, nhưng nếu bạn muốn tìm hiểu thêm, bạn có thể đọc tài liệu tại http://momentjs.com / docs / # / tùy chỉnh / tương đối-thời gian / .
Để sử dụng điều này chỉ ở một nơi thay vì ghi đè các ngôn ngữ, hãy chuyển một chuỗi bạn chọn làm đối số đầu tiên khi bạn xác định moment.updateLocale
và sau đó gọi phương thức lịch sử dụng ngôn ngữ đó (ví dụ:moment.updateLocale('yesterday-today').calendar( /* moment() or whatever */ )
:)
CHỈNH SỬA: Moment ^ 2.12.0 bây giờ có updateLocale
phương thức. updateLocale
và có locale
vẻ giống nhau về mặt chức năng và locale
vẫn chưa bị phản đối, nhưng đã cập nhật câu trả lời để sử dụng phương pháp mới hơn.
Tôi sử dụng kết hợp giữa add()
và endOf()
với khoảnh khắc
//...
const today = moment().endOf('day')
const tomorrow = moment().add(1, 'day').endOf('day')
if (date < today) return 'today'
if (date < tomorrow) return 'tomorrow'
return 'later'
//...
Yêu cầu:
moment().fromNow()
chức năng tiêu chuẩn ."today"
, "yesterday"
, "tomorrow"
vvGiải pháp:
// call this function, passing-in your date
function dateToFromNowDaily( myDate ) {
// get from-now for this date
var fromNow = moment( myDate ).fromNow();
// ensure the date is displayed with today and yesterday
return moment( myDate ).calendar( null, {
// when the date is closer, specify custom values
lastWeek: '[Last] dddd',
lastDay: '[Yesterday]',
sameDay: '[Today]',
nextDay: '[Tomorrow]',
nextWeek: 'dddd',
// when the date is further away, use from-now functionality
sameElse: function () {
return "[" + fromNow + "]";
}
});
}
NB: Từ phiên bản 2.14.0, đối số định dạng cho hàm lịch có thể là một lệnh gọi lại, xem http://momentjs.com/docs/#/displaying/calendar-time/ .
Bạn có thể sử dụng cái này:
const today = moment();
const tomorrow = moment().add(1, 'days');
const yesterday = moment().subtract(1, 'days');
Tôi có giải pháp tương tự, nhưng cho phép sử dụng các ngôn ngữ:
let date = moment(someDate);
if (moment().diff(date, 'days') >= 1) {
return date.fromNow(); // '2 days ago' etc.
}
return date.calendar().split(' ')[0]; // 'Today', 'yesterday', 'tomorrow'
Từ thời điểm 2.10.5 hỗ trợ chỉ định định dạng đầu ra lịch cho mỗi lần gọi Để xem tài liệu chi tiết hơn, hãy kiểm tra Khoảnh khắc - Lịch .
**Moment 2.10.5**
moment().calendar(null, {
sameDay: '[Today]',
nextDay: '[Tomorrow]',
nextWeek: 'dddd',
lastDay: '[Yesterday]',
lastWeek: '[Last] dddd',
sameElse: 'DD/MM/YYYY'
});
Từ lịch 2.14.0 cũng có thể gọi lại để trả về giá trị.
**Moment 2.14.0**
moment().calendar(null, {
sameDay: function (now) {
if (this.isBefore(now)) {
return '[Will Happen Today]';
} else {
return '[Happened Today]';
}
/* ... */
}
});
Trong Moment.js, phương thức from () có độ chính xác hàng ngày mà bạn đang tìm kiếm:
var today = new Date();
var tomorrow = new Date();
var yesterday = new Date();
tomorrow.setDate(today.getDate()+1);
yesterday.setDate(today.getDate()-1);
moment(today).from(moment(yesterday)); // "in a day"
moment(today).from(moment(tomorrow)); // "a day ago"
moment(yesterday).from(moment(tomorrow)); // "2 days ago"
moment(tomorrow).from(moment(yesterday)); // "in 2 days"
from
không thực sự có độ chính xác hàng ngày. Ví dụ: nếu ngày hôm qua là bốn giờ trước và tôi chọn một thời gian là năm giờ trước, nó sẽ nói "5 giờ trước" thay vì ngày hôm qua. Giải pháp này không có gì để làm với độ chính xác của from
, nhưng trong những ngày qua ở.
Vì vậy, đây là những gì tôi đã làm
var dateText = moment(someDate).from(new Date());
var startOfToday = moment().startOf('day');
var startOfDate = moment(someDate).startOf('day');
var daysDiff = startOfDate.diff(startOfToday, 'days');
var days = {
'0': 'today',
'-1': 'yesterday',
'1': 'tomorrow'
};
if (Math.abs(daysDiff) <= 1) {
dateText = days[daysDiff];
}
Bạn có thể sử dụng phương thức .add () và .subtract () để lấy ngày hôm qua và ngày mai. Sau đó, sử dụng phương pháp định dạng để chỉ lấy ngày .format ("D / M / Y"), D là viết tắt của Ngày, M cho Tháng, Y cho Năm. Kiểm tra Moment Docs
let currentMilli = Date.now()
let today = Moment(currentMilli).format("D/M/Y");
let tomorrow = Moment(currentMilli).add(1, 'days').format("D/M/Y");
let yesterday = Moment(currentMilli).subtract(1, 'days').format("D/M/Y");
Kết quả sẽ là:
Current Milli - 1576693800000
today - 19/12/2019
tomorrow - 18/12/2019
yesterday - 18/12/2019