【问题标题】:Trying to format date, always getting invalid date尝试格式化日期,总是得到无效的日期
【发布时间】:2014-04-01 10:38:52
【问题描述】:

用户从 jquery datepicker 中选择一个日期,格式如下:

DD.MM.YYYY

当用户提交表单时,我想使用 moment 将日期输入转换为 UTC。但是,无论我对输入做什么,都会收到 Invalid Date 错误。

例如输入是

30.03.2014

我尝试格式化:

console.log(moment(input).format('MM/DD/YY')); <-- prints Invalid Date

我试试

console.log(moment(input).utc().toDate()); <-- prints invalid date

好像moment不能解析输入,可以解析MM.DD.YY格式,但是输入必须是DD.MM.YYYY格式。

有什么想法吗?


使用

moment(input, 'DD.MM.YYYY')

给我:

{ from: '01.03.2014', to: '30.03.2014' }
{ from: Sat Mar 01 2014 00:00:00 GMT+0100 (CET),
  to: Tue Apr 01 2014 11:00:00 GMT+0200 (CEST) }

【问题讨论】:

    标签: javascript node.js momentjs


    【解决方案1】:

    考虑使用 moment 的提示支持:

    moment(input, 'DD.MM.YYYY')
    

    此处提供了演示该方法的小提琴:

    http://jsfiddle.net/x4Xm3/

    Moment 将采用本地时间输入,因此如果您在该时区之外工作,您可能需要将时区附加到您的输入中。请参阅http://momentjs.com/docs 的文档 - 特别是 parseZone() 和“String + Format”部分。

    在服务器端(节点)的情况下,由于服务器的时区,您可能会得到奇怪的结果。

    【讨论】:

    • 谢谢,还是有一些奇怪的地方,请看我的编辑。 30.03 转换为 01.04
    • 我注意到,只要我在日期上添加一天或一小时,momentjs 就会将其转换为 CEST,而不是使用 CET。
    • @Peter,如果您不知道提示支持的格式怎么办?假设一个 API 正在发回一个日期,但它的格式可能会有所不同?那么最好的方法是什么?谢谢
    • @RichardBailey 如果日期格式发生变化,没有什么能神奇地为您计算出所有日期格式 - 例如,日期 2016 年 3 月 8 日可能是 8 月 3 日或 3 月 8 日。您需要创建自己的代码,以根据您对 API 如何更改日期的了解来选择最佳提示。谁会创建一个返回日期格式发生变化的 API?!
    • @PeterBailey 我猜是个白痴-感谢您的回复1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2015-02-03
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多