Як я можу прибрати час з дати за допомогою Moment.js?


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

На ній відображається: "28 лютого 2013 09:24"

Але я хотів би зняти час наприкінці. Як я можу це зробити?

Я використовую Moment.js .


Використовуйте метод Split для розділення рядків
AmGates

Відповіді:


605

Вибачте, що увімкнули так пізно, але якщо ви хочете видалити частину часу, moment()а не форматувати , код:

.startOf('day')

Посилання: 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
Також будьте уважні, що ця функція насправді мутує оригінальний об’єкт
Дірк Бур

6
.startOf('day')не знімає часову частину сама по собі, вона просто встановлює час на 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 (). (). Наприклад, для своєї справи ви можете пройти moment.utc(dateTime).format('MMMM D, YYYY').


9
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}


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 років пізніше, але це було щось, що мені потрібно було розібратися та чи форматувати його РРРР-ММ-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 тричі.
Менай Ала Еддін - Аладдін

МММ дасть вам 3 перші букви місяця. "Квітень" MMMM дасть вам ім'я повного місяця
Adrian Grzywaczewski

4

Для таких людей, як я, хочеться формату довгої дати ( LLLL), але без часу доби для цього є проблема GitHub: https://github.com/moment/moment/isissue/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
Нарешті розумна відповідь. Візьміть мою заяву, сер! Проблема ще не була вирішена.
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
Том
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.