【问题标题】:"moment" format date with only a year or month and a year"moment" 格式日期,只有一年或一个月和一年
【发布时间】:2020-03-11 11:40:00
【问题描述】:

我有一个以“YYYYMMDD”格式表示日期的字符串,我需要将其格式化为不同的格式。

我正在使用时刻。

import moment from 'moment';

getDateStr(date: string, format){
    return moment(date, 'YYYYMMDD').format(format);
}

问题在于,如果获取部分日期,则字符串会用“01”而不是缺少的参数敲击。

例如,如果格式为“YYYY-MM-DD”,日期为“201003”,我得到“2010-03-01”,我想得到“2010-03”。

我怎样才能让它以通用的方式工作?

【问题讨论】:

  • moment("201003", "YYYY-MM").format("YYYY-MM")?
  • 有时日期确实是完整日期,我不知道它本身会是什么格式。
  • 你能补充一些例子吗?
  • 当然,格式可以是“MM-DD-YY”,日期可以是“20100302”,有很多选择。
  • 时刻(日期).format(格式)?传入有效的日期和格式选项

标签: javascript angular typescript momentjs


【解决方案1】:

您可以从创建的时刻对象中获取未使用的令牌:

function getDateStr(date: string, format) {
    const m = moment(date, 'YYYYMMDD');
    const unused = m.parsingFlags().unusedTokens;
    format = format.split('-');
    format = format.filter(part => !unused.includes(part));
    format = format.join('-');
    return moment(date, 'YYYYMMDD').format(format);
}

【讨论】:

  • 已编辑。 _pf 是私有字段,应该使用 parsingFlags 方法获取令牌。
  • 它工作了一半..我仍然有“-”字符,现在我得到“-05-2016”,我可以删除打开和关闭“-”,你有没有更好的主意?如果我只有一年,我会得到“--2016”
  • 已编辑,但仅适用于 - 分隔符。您必须知道正在使用哪个分隔符。
  • 我发现的主要问题-未使用的来自“YYYYMMDD”,但格式可以是“D-MM-YYYY”所以如果我给“201602”日期“DD”将是多余的,但是它不是格式的一部分..
【解决方案2】:
import moment from 'moment';

getDateStr(date: string, format){
    // you can directly use date, but it should be valid date

    return moment(date).format(format)
}

【讨论】:

  • 它不起作用..对于“201605”,我得到“DD-MM-YYYY”格式的“01-01-201605”。
  • 我猜你必须再传递一个参数来识别你的输入日期格式
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多