【问题标题】:Using moment.js, how to display the current date format for the user?使用 moment.js,如何为用户显示当前日期格式?
【发布时间】:2015-07-13 01:45:11
【问题描述】:

给定一个文本字段,我想要一个合适的占位符。典型的占位符类似于:“mm/dd/yyyy”。

但是,我想使用moment.js 来使用支持区域设置的日期。

这意味着我将指定“l”作为 moment.js 日期格式,我如何确定在这种情况下 moment.js 将使用的日期格式?

用户不会理解“l”是什么意思,所以在占位符文本中使用这个值没有什么意义。

具体来说,我希望能够访问诸如时刻内部“defaultLongDateFormat”之类的东西。 (虽然这只是一个默认值——moment.js 可能会更新它或在运行时为支持区域设置的日期格式提供一些其他映射——我想访问该映射。)

编辑:

有多个反对票(他们没有解释他们反对票的原因)。

我认为这是因为他们不理解这个问题,所以这里有一些例子:

我想要一个这样的函数: getFormat("l") -> "mm/dd/yyyy",或美国语言环境的等效项。 getFormat("l") -> "dd/mm/yyyy",或等效的,用于 AU 语言环境。

我确实不想要格式化给定的日期,或者解析给定的日期 - 我只想确定它是给定任意 moment.js 格式的用户友好格式,特别是对于 'l '。

【问题讨论】:

  • 致反对者:你为什么反对这个?这是一个相关的问题。
  • 您的问题令人困惑。您是要求以某种格式显示当前日期的格式还是日期本身?
  • @RobG:我被引导相信 moment.js 定义了这些?即我指定locale(如'en')和格式字符串(如'L'),然后moment.js格式化?
  • @PrestonVanLoon:两者都不是。我想要格式字符串本身。即,如果 moment("1234-12-12", "l") 会导致 "12-12-1234",我希望得到结果字符串 "mm-dd-yyyy"。
  • 好的,我想我现在明白你的问题了。您想根据当时用来解释字符串的“语言环境”打印要使用的格式的提示。也许您应该只使用一个明确的日期,例如 23/01/2015,以便用户遵循该格式。而且我认为不应该为此使用占位符,因为一旦用户输入某些内容,它们就会消失,因此如果他们更改值,他们就不会得到提示。

标签: javascript momentjs


【解决方案1】:

我不认为它暴露得很好,但如果浏览器的语言配置正确,你可以这样做:

var lang = navigator.languages ? navigator.languages : navigator.language;

moment().locale(lang).localeData()._longDateFormat['L']

根据您使用的浏览器,语言的行为略有不同,所以不知道这有多可靠。

【讨论】:

  • 这很完美 - 适用于 en_AU 和 en_US。我预计这可能会在未来的修订中被删除,但这似乎是可以做到的最好的。
  • 你测试了吗? Safari、Firefox 和 Ominweb 对我来说都是错误的。 Chrome 有 3 种不同版本的 en 的 scatter gun 方法,但其中一个是正确的。
  • 是的,就像我说的,你必须配置语言设置。
  • @RobG:我实际上是在我的应用程序中处理嵌入式 chrome 控件,因此我可以将我的测试限制在单个浏览器中。不过,我确实使用“en”、“en_AU”和“en_US”进行了测试。 :)
  • @Arafangion — IE 11 是唯一适合我的版本。
【解决方案2】:

跟进 Adam R 的回答:

现在好像已经暴露了:

localeData.longDateFormat(dateFormat);

返回缩写日期时间格式 LT、L、LL 等的完整格式

(来源:http://momentjs.com/docs/)

通过moment.localeData()获取当前使用的语言环境数据

【讨论】:

    猜你喜欢
    • 2020-11-13
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多