Moment.js-从输入表单中创建“仅”时间变量

时间:2018-09-24 15:52:25

标签: javascript angular momentjs angular-reactive-forms

您会认为这很简单,但是我有一个<input type="time">,用户可以在其中输入时间。该字段为我提供了以下输出:16:30。因此,基本上,它更改了它在输入中的显示方式,即--:-- --的输入为04:30 PM

(顺便说一句,这是使用Material的Angular反应形式)

因此,在表单中,我必须使用的字符串是:16:30

我可以将它变成这样的矩对象:

let timeTwelve = moment(this.webcastForms.value[0].time, 'HH:MM');

console.log是我的哪个大对象。我希望时间能及时到来,以便我可以按需要格式化它。因此,我尝试了:

let timeTwelve = moment(this.webcastForms.value[0].time, 'HH:MM').format('hh:mm A');

,其输出:invalid date

不知道为什么要这么做。有任何想法吗?

(奖金,我也有一个日期,我想创建第三个变量,它们都以MM/DD/YYYY hh:mm a (08/26/2016 09:00 AM)的格式组合。如何将时间添加到日期中,或者重新创建日期瞬间对象,并传递日期和时间?)

感谢您的帮助!

(作为参考,我的约会已经是片刻了)

Moment {_isAMomentObject: true, _i: {…}, _isUTC: false, _pf: {…}, _locale: 
    Locale, …}
    _d: Mon Sep 24 2018 00:00:00 GMT-0400 (Eastern Daylight Time) {}
    _i: {year: 2018, month: 8, date: 24}
    _isAMomentObject: true
    _isUTC: false
    _isValid: true
    _locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: 
    "Invalid date", ordinal: ƒ, _dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, …}
    _pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -1, charsLeftOver: 0, …}
    __proto__: Object

2 个答案:

答案 0 :(得分:2)

Moment给出了无效的日期,因为它希望时间与某个日期相关联。

如果您的日期和时间都是字符串,那么为什么不尝试类似的操作

moment(`${dateStr}T${timeStr}`).format("MM/DD/YYYY hh:mm a")

console.log(moment(`${'2018-04-02'}T${'16:30'}`).format("MM/DD/YYYY hh:mm a"))

/* if date is already moment object */
const time = "16:30".split(':');
const momentObj = moment("2018-04-02"); //creating a moment obj for demo
momentObj.set({hours: time[0], minutes: time[1]});
console.log(momentObj.format("MM/DD/YYYY hh:mm a"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

答案 1 :(得分:1)

我认为您使用的格式一定有问题。 moment(this.webcastForms.value[0].time, 'HH:MM');

分钟格式为mm,但您使用MM表示月份号。尝试将其更改为

moment(this.webcastForms.value[0].time, 'HH:mm').format('hh:mm A');