Định dạng ngày và Trừ ngày bằng cách sử dụng Moment.js


119

Tôi muốn một biến giữ ngày hôm qua ở định dạng DD-MM-YYYYbằng Moment.js. Vì vậy, nếu hôm nay là 15-04-2015, tôi muốn trừ đi một ngày và có 14-4-2015.

Tôi đã thử một vài kết hợp như thế này:

startdate = moment().format('DD-MM-YYYY');
startdate.subtract(1, 'd');

và điều này:

startdate = moment().format('DD-MM-YYYY').subtract(1, 'd');

và cũng thế này:

startdate = moment();
startdate.subtract(1, 'd');
startdate.format('DD-MM-YYYY')

Nhưng tôi không hiểu ...


Bạn đã thử trừ trước khi định dạng? Định dạng nó chỉ cung cấp cho bạn một chuỗi ...
ndugger

khoảnh khắc (). trừ (10, "ngày") thay vì chỉ "d" có thể?
leopik

"Giữ" ngày hôm qua là một ngày và biến nó thành một chuỗi được định dạng khi bạn cần hiển thị nó.
Mũi nhọn

@NickDugger tôi đã mắc lỗi trong câu hỏi đó, lần thử cuối cùng sẽ nói startdate = khoảnh khắc (); trong dòng đầu tiên. Tôi đã chỉnh sửa nó ngay bây giờ nhờ
beaumondo

format()là hàm làm cho nó thành một chuỗi. Bạn nên làm điều đó cuối cùng.
jwatts1980

Câu trả lời:


208

Bạn có nhiều điều kỳ lạ xảy ra. Đầu tiên đã được chỉnh sửa trong bài viết của bạn, nhưng nó phải được thực hiện theo thứ tự các phương thức đang được gọi.

.formattrả về một chuỗi. Chuỗi không có subtractphương thức.

Vấn đề thứ hai là bạn đang trừ đi một ngày, nhưng không thực sự lưu nó dưới dạng một biến.

Mã của bạn, sau đó, sẽ trông giống như:

var startdate = moment();
startdate = startdate.subtract(1, "days");
startdate = startdate.format("DD-MM-YYYY");

Tuy nhiên, bạn có thể xâu chuỗi lại với nhau; nó sẽ trông như:

var startdate = moment().subtract(1, "days").format("DD-MM-YYYY");

Sự khác biệt là chúng tôi đang thiết lập thời gian bắt đầu với những thay đổi mà bạn đang thực hiện trên ngày bắt đầu, bởi vì khoảnh khắc là hủy diệt.


13
subtractTrong thực tế, khoảnh khắc này là phá hoại. "Đột biến khoảnh khắc ban đầu bằng cách trừ đi thời gian". Xem ở đây: momentjs.com/docs/#/manipulating/subtract
docksteaderluke


5

Thử cái này:

var duration = moment.duration({'days' : 1});
moment().subtract(duration).format('DD-MM-YYYY');

Điều này sẽ cung cấp cho bạn 14-04-2015- hôm nay là 15-04-2015

Ngoài ra, nếu phiên bản khoảnh khắc của bạn nhỏ hơn 2.8.0, bạn có thể sử dụng:

startdate = moment().subtract('days', 1).format('DD-MM-YYYY');

Thay vì điều này:

startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');

3

startdate = moment().subtract(1, 'days').startOf('day')


2

Tôi nghĩ rằng bạn đã có nó trong lần thử cuối cùng đó, bạn chỉ cần lấy chuỗi .. trong bảng điều khiển của Chrome ..

startdate = moment();
startdate.subtract(1, 'd');
startdate.format('DD-MM-YYYY');
"14-04-2015"

startdate = moment();
startdate.subtract(1, 'd');
myString = startdate.format('DD-MM-YYYY');
"14-04-2015"
myString
"14-04-2015"

2

Trong thời điểm angularjs = "^ 1.3.0"

moment('15-01-1979', 'DD-MM-YYYY').subtract(1,'days').format(); //14-01-1979
or
moment('15-01-1979', 'DD-MM-YYYY').add(1,'days').format(); //16-01-1979
``




2
var date = new Date();

var targetDate = moment(date).subtract(1, 'day').toDate(); // date object

Bây giờ, bạn có thể định dạng cách bạn muốn xem ngày này hoặc bạn có thể so sánh ngày này với ngày khác, v.v.

Hàm toDate () là điểm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.