จัดรูปแบบวันที่และลบวันโดยใช้ Moment.js


123

ฉันต้องการให้ตัวแปรถือวันที่ของเมื่อวานในรูปแบบDD-MM-YYYYโดยใช้ Moment.js ถ้าวันนี้คือ 15-04-2558 ผมขอลบวันละ 14-4-2015

ฉันได้ลองชุดค่าผสมบางอย่างดังนี้:

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

และนี่:

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

และสิ่งนี้:

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

แต่ฉันไม่เข้าใจ ...


คุณเคยลองลบก่อนจัดรูปแบบหรือไม่? การจัดรูปแบบให้สตริง ...
ndugger

ช่วงเวลา () ลบ (10, "วัน") แทนที่จะเป็นแค่ "d" อาจจะ?
leopik

"ถือ" วันที่ของเมื่อวานเป็นวันที่และเปลี่ยนเป็นสตริงที่จัดรูปแบบเมื่อคุณต้องการแสดง
Pointy

@NickDugger ฉันทำผิดในคำถามนั้นความพยายามครั้งสุดท้ายควรพูดว่า startdate = moment (); ในบรรทัดแรก ฉันได้แก้ไขแล้วขอบคุณ
beaumondo

format()คือฟังก์ชันที่ทำให้เป็นสตริง คุณควรทำสิ่งนั้นเป็นครั้งสุดท้าย
jwatts1980

คำตอบ:


211

คุณมีสิ่งแปลกประหลาดมากมายเกิดขึ้น ครั้งแรกได้รับการแก้ไขในโพสต์ของคุณ แต่เกี่ยวข้องกับลำดับที่วิธีการถูกเรียกใช้

.formatส่งคืนสตริง String ไม่มีsubtractเมธอด

ประเด็นที่สองคือคุณกำลังลบวัน แต่ไม่ได้บันทึกเป็นตัวแปรจริงๆ

รหัสของคุณควรมีลักษณะดังนี้:

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

อย่างไรก็ตามคุณสามารถเชื่อมโยงสิ่งนี้เข้าด้วยกัน สิ่งนี้จะมีลักษณะดังนี้:

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

ความแตกต่างคือเรากำลังตั้งค่าวันที่เริ่มต้นสำหรับการเปลี่ยนแปลงที่คุณทำในวันที่เริ่มต้นเนื่องจากช่วงเวลานั้นเป็นสิ่งที่ทำลายล้าง


13
moment.js subtractคือการทำลายล้าง "เปลี่ยนช่วงเวลาเดิมโดยการลบเวลา" ดูที่นี่: momentjs.com/docs/#/manipulating/subtract
docksteaderluke


5

ลองสิ่งนี้:

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

สิ่งนี้จะให้คุณ14-04-2015- วันนี้คือ 15-04-2015

หรืออีกวิธีหนึ่งหากเวอร์ชัน momentjs ของคุณน้อยกว่า 2.8.0 คุณสามารถใช้:

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

แทนสิ่งนี้:

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

4
var date = new Date();

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

ตอนนี้คุณสามารถจัดรูปแบบว่าคุณต้องการดูวันที่นี้อย่างไรหรือจะเปรียบเทียบวันที่นี้กับวันอื่น ๆ ก็ได้

toDate() ฟังก์ชั่นคือจุด



2

ฉันคิดว่าคุณได้รับมันในความพยายามครั้งสุดท้ายคุณเพียงแค่จับสตริง .. ในคอนโซลของ 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

ในช่วงเวลา 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
``


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.