ฉันจะลบเวลาจากวันที่ด้วย Moment.js ได้อย่างไร


268
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LLL');
};

มันแสดง: "28 กุมภาพันธ์ 2013 09:24"

แต่ฉันต้องการที่จะลบเวลาในตอนท้าย ฉันจะทำสิ่งนั้นได้อย่างไร

ฉันใช้Moment.js


ใช้วิธีการแยกเพื่อแยกสตริง
AmGates

คำตอบ:


605

ขออภัยที่จะไปช้ามาก แต่ถ้าคุณต้องการที่จะลบส่วนเวลาของmoment()มากกว่าที่จะจัดรูปแบบมันก็คือรหัส:

.startOf('day')

Ref: http://momentjs.com/docs/#/manipulating/start-of/


90
ระวังสิ่งนี้หากคุณอยู่ระหว่างเขตเวลา (หรือถ้าคุณไม่ใส่ใจกับเขตเวลา) ฉันมีปัญหาที่วันที่ UTC ของฉันได้รับการแปลงเป็นเวลาท้องถิ่นจากนั้นจึงใช้startOf('day')ซึ่งเป็นจุดเริ่มต้นของวันก่อนหน้า แก้ไขด้วยmoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
colllin

26
นอกจากนี้โปรดระวังด้วยว่าฟังก์ชั่นนี้จะกลายพันธุ์วัตถุดั้งเดิมจริง ๆ
Dirk Boer

6
.startOf('day')ไม่ได้ลบเวลาส่วนต่อ se เพียงแค่ตั้งเวลาเป็น 00:00:00 ดังนั้นใช่ตามที่แสดงความคิดเห็นโดย 'collin' คุณจะต้องระมัดระวังในการบันทึกวันที่ ทางเลือกที่ดีกว่าคือการใช้format('LL')ตามที่ได้รับการตอบในหัวข้อนี้
Sudarshan_SMD

4
เพื่อหลีกเลี่ยงการกรรมวิธีวัตถุเดิมใช้หรือsomeMoment.clone().startOf('day') moment(someMoment).startOf('day')
ปาง

ระวัง startOf ('วัน') จะรีเซ็ตทุกอย่างและไม่เพียง แต่ตั้งเวลาเป็น 00:00:00 moment().utc().add(1,'d').startOf('day')จะรีเซ็ตวัตถุเป็นวันนี้
อุโมงค์

50

ใช้ format('LL')

ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณกำลังพยายามที่จะทำอย่างไรกับมันformat('LL')สามารถทำเคล็ดลับ มันสร้างบางสิ่งเช่นนี้

Moment().format('LL'); // => April 29, 2016

26

วิธีที่ถูกต้องคือการระบุอินพุตตามความต้องการของคุณซึ่งจะทำให้คุณมีความยืดหยุ่นมากขึ้น

คำจำกัดความปัจจุบันประกอบด้วยสิ่งต่อไปนี้

LTS : 'h:mm:ss A', LT : 'h:mm A', L : 'MM/DD/YYYY', LL : 'MMMM D, YYYY', LLL : 'MMMM D, YYYY h:mm A', LLLL : 'dddd, MMMM D, YYYY h:mm A'

คุณสามารถใช้สิ่งเหล่านี้หรือเปลี่ยนอินพุตที่ส่งผ่านไปยังช่วงเวลา (). รูปแบบ () moment.utc(dateTime).format('MMMM D, YYYY')ตัวอย่างเช่นสำหรับกรณีของคุณคุณสามารถส่งผ่าน




6

ด้วย moment.js เวอร์ชันที่ใหม่กว่าคุณสามารถทำสิ่งนี้ได้:

var dateTime = moment();

var dateValue = moment({
    year: dateTime.year(),
    month: dateTime.month(),
    day: dateTime.date()
});

ดู: http://momentjs.com/docs/#/parsing/object/


มันจะไม่เป็นdate: dateTime.date()แทนday: dateTime.date()?
philfreo

1
'วันที่และวันที่สำคัญทั้งสองหมายถึงวันต่อเดือน' จากเอกสาร dayทำงานก่อนรุ่น 2.8.4
oldwizard

6

ตกลงดังนั้นฉันรู้ว่าฉันไปงานเลี้ยงสาย เหมือนสาย 6 ปี แต่นี่เป็นสิ่งที่ฉันต้องคิดออกมาและจัดรูปแบบ YYYY-MM-DD

moment().format(moment.HTML5_FMT.DATE); // 2019-11-08

2019-11-08T17:44:56.144นอกจากนี้คุณยังสามารถส่งผ่านในพารามิเตอร์เช่น,

moment("2019-11-08T17:44:56.144").format(moment.HTML5_FMT.DATE); // 2019-11-08

https://momentjs.com/docs/#/parsing/special-formats/


4

เมื่อใดก็ตามที่ฉันใช้moment.jsห้องสมุดฉันระบุรูปแบบที่ต้องการด้วยวิธีนี้:

moment(<your Date goes here>).format("DD-MMM-YYYY")

หรือ

moment(<your Date goes here>).format("DD/MMM/YYYY")

... ฯลฯ ฉันหวังว่าคุณจะได้รับความคิด

ภายในฟังก์ชั่นการจัดรูปแบบคุณวางรูปแบบที่ต้องการ ตัวอย่างข้างต้นจะกำจัดองค์ประกอบที่ไม่ต้องการทั้งหมดออกจากวันที่เช่นนาทีและวินาที


นี่ไม่ใช่ความคิดที่ดีถ้าคุณต้องการแสดงเนื้อหาของคุณในสถานที่ต่าง ๆ หากคุณต้องการให้เป็นวันที่แสดงอยู่ในรูปแบบที่ถูกต้องสำหรับสถานที่ของผู้ใช้ที่คุณจำเป็นต้องใช้หนึ่งในรูปแบบวันที่ตั้งไว้ ( L, LLฯลฯ )
AJ ริชาร์ด

ทำไมคุณตั้ง MMM สามครั้ง
Menai Ala Eddine - Aladdin

MMM จะให้ 3 ตัวอักษรแรกของเดือน 'Apr' MMMM จะให้ชื่อเต็มกับคุณ
Adrian Grzywaczewski

4

สำหรับคนอย่างผมต้องการรูปแบบวันที่ยาว ( LLLL) แต่ไม่มีเวลาของวันที่มีปัญหา GitHub ที่: https://github.com/moment/moment/issues/2505 สำหรับตอนนี้มีวิธีแก้ไข:

var localeData = moment.localeData( moment.locale() ),
    llll = localeData.longDateFormat( 'llll' ),
    lll = localeData.longDateFormat( 'lll' ),
    ll = localeData.longDateFormat( 'll' ),
    longDateFormat = llll.replace( lll.replace( ll, '' ), '' );
var formattedDate = myMoment.format(longDateFormat);

1
ในที่สุดคำตอบที่สมเหตุสมผล รับคุณ upvote ของฉัน! ปัญหายังไม่ได้รับการแก้ไข แต่ดูเหมือนว่า
oyalhi

3

คุณสามารถใช้ตัวสร้างนี้

moment({h:0, m:0, s:0, ms:0})

http://momentjs.com/docs/#/parsing/object/

console.log( moment().format('YYYY-MM-DD HH:mm:ss') )

console.log( moment({h:0, m:0, s:0, ms:0}).format('YYYY-MM-DD HH:mm:ss') )
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


เพิ่มคำอธิบายแร่ที่นี่
Mathews Sunny

สิ่งนี้น่าสนใจมาก! มันสร้างช่วงเวลาและเอาชนะชั่วโมงนาทีและวินาที แต่ยังคงรักษาวันที่ภายใต้ ที่น่าสนใจเพราะฉันจะเดาได้ว่าmoment({h:0, m:0, s:0, ms:0})จะให้ฉัน 1 มกราคม 1970 มากกว่าวันนี้
Simon_Weaver

ดูเหมือนว่าmoment({ h: 0 })จะทำเช่นเดียวกัน
Simon_Weaver

1
เอกสารพูดว่าOmitted units default to 0 or the current date, month, and year.
Simon_Weaver

2

ลองสิ่งนี้:

moment.format().split("T")[0]

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