【问题标题】:Moment.js - Creating "time" only variable from input formMoment.js - 从输入表单创建“时间”唯一变量
【发布时间】:2018-09-24 15:52:25
【问题描述】:

您可能认为这很简单,但我有一个<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

【问题讨论】:

  • console.log 对象的外观如何(您在问题中提到的位置)? this.webcastForms.value[0].time 的值到底是多少?你错过了“上午/下午”格式吗?另外,你使用的是什么版本的 momentjs?

标签: javascript angular momentjs angular-reactive-forms


【解决方案1】:

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

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

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

【讨论】:

  • 哇,很棒的收获!我假设首都是军事时间,谢谢!
  • 'hh:mm A' 格式不会绑定到时间输入字段,但 'HH:mm' 格式会创建一个自动显示为 AM 或 PM 的 24 小时制时间。
  • 这应该是公认的答案
【解决方案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>

【讨论】:

  • 谢谢,这看起来很有希望!我应该提到,由于 material-moment-date-module,我的日期已经是一个时刻对象。因此,使用您在上面发布的代码,我有一个 invalid date 错误。
  • (我在原始问题的底部发布了对象的外观,以供参考。)
  • 这很棒,让我得到了我需要的东西,而且我也学到了很多关于 Moment 的知识。谢谢!
  • @Kenny 很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多