Как я могу удалить время с даты с Moment.js?


269
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/#/manipulation/start-of/


90
Будьте осторожны с этим, если вы идете между часовыми поясами (или если вы не обращаете внимания на часовые пояса). У меня была проблема, когда моя UTC дата конвертировалась в местное время, затем применялась startOf('day'), что было тогда началом предыдущего дня. Исправлено сmoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
Коллин

26
Также будьте осторожны, что эта функция действительно мутирует оригинальный объект
Дирк Бур

6
.startOf('day')не удаляет временную часть как таковую, он просто устанавливает время на 00:00:00. Итак, да, как прокомментировал «collin», вы должны быть осторожны при сохранении даты. Лучшей альтернативой является использование format('LL'), как уже было сказано в этой теме.
Sudarshan_SMD

4
Чтобы избежать изменения оригинального объекта, используйте someMoment.clone().startOf('day')или moment(someMoment).startOf('day').
Панг

Будьте осторожны, startOf ('day') сбрасывает все, а не просто устанавливает время на 00:00:00. moment().utc().add(1,'d').startOf('day')сбросит объект на сегодня.
Тристан,

51

использование 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 (). Format (). Например, для вашего случая вы можете пройти 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 лет позже, но мне нужно было это выяснить и отформатировать в формате ГГГГ-ММ-ДД.

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 Richardson

Почему вы установили МММ три раза.
Менай Ала Эддин - Аладдин

МММ даст вам 3 первые буквы месяца. «Апр» MMMM даст вам полное название месяца
Адриан 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
Наконец разумный ответ. Возьми мой голос, сэр! Кажется, проблема еще не решена.
19

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
Tom
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.