用moment.js格式化日期


262

我有这种格式的字符串:

var testDate = "Fri Apr 12 2013 19:08:55 GMT-0500 (CDT)"

我想使用moment.js以这种格式mm/dd/yyyy : 04/12/2013显示它。

我尝试使用这种方法来做

moment(testDate,'mm/dd/yyyy');

哪些错误并说there is no such method called replace?我是否以错误的方式处理此问题?

编辑:

我还应该提到我使用的是针对meteor.js打包的moment.js的预打包版本

Object [object Date] has no method 'replace' : The Exact error from the console

堆栈跟踪:

 at makeDateFromStringAndFormat (http://127.0.0.1:3000/packages/moment/lib/moment/moment.js?b4e3ac4a3d0794023a4410e7941c3e179398b5b0:539:29)
    at moment (http://127.0.0.1:3000/packages/moment/lib/moment/moment.js?b4e3ac4a3d0794023a4410e7941c3e179398b5b0:652:24)
    at populateProfileForEdit (http://127.0.0.1:3000/client/views/home/administration/directory/profiles/profiles.js?acfff908a6a099f37312f62892a22b40f82e5e0f:147:25)
    at Object.Template.profile_personal.rendered (http://127.0.0.1:3000/client/views/home/administration/directory/profiles/profiles.js?acfff908a6a099f37312f62892a22b40f82e5e0f:130:13)
    at Spark.createLandmark.rendered (http://127.0.0.1:3000/packages/templating/deftemplate.js?b622653d121262e50a80be772bf5b1e55ab33881:126:42)
    at http://127.0.0.1:3000/packages/spark/spark.js?45c746f38023ceb80745f4b4280457e15f058bbc:384:32
    at Array.forEach (native)
    at Function._.each._.forEach (http://127.0.0.1:3000/packages/underscore/underscore.js?867d3653d53e9c7a171483edbcad9670e12288c7:79:11)
    at http://127.0.0.1:3000/packages/spark/spark.js?45c746f38023ceb80745f4b4280457e15f058bbc:382:7
    at _.extend.flush (http://127.0.0.1:3000/packages/deps/deps.js?9642a93ae1f8ffa8eb1c2475b198c764f183d693:231:11) 

1
replace()在代码中使用吗?如果不是,则您使用的插件不适当地调用了不存在的方法。
grainlarceny

我已经用称为“替换”的方法更新了确切的错误和堆栈跟踪的问题。我根本没有直接打电话给替换
Warz

Answers:


591

的第二个参数moment()解析格式,而不是显示格式。

为此,您需要.format()方法

moment(testDate).format('MM/DD/YYYY');

另请注意,情况确实很重要。对于月,月日和年,格式应为大写。


优秀的。最初,我试图像此刻那样使用它moment()。format(),但失败了。谢谢
Warz

var obj = {end_date:时刻($ scope.activity.endDate).format('MM / DD / YYYY')};
Michael J. Calkins

@MichaelCalkins抱歉。那是做什么用的?而且,为什么还要额外引用AngularJS($scope)?
乔纳森·洛诺夫斯基

@JonathanLonowski可以是任何变量。我碰巧正在编程并寻找这个答案。只是一个例子。
Michael J. Calkins

每当我使用格式时,我都无法在其上调用date()。因此,我不得不使用某种子字符串构造来以(“ DD-MM-YYYY”)格式抓紧一天。
Henk Jansen 2013年

49

包括moment.js,并使用以下代码可以格式化日期

var formatDate= 1399919400000;

var responseDate = moment(formatDate).format('DD/MM/YYYY');

我的输出是“ 13/05/2014”


1
我该如何扭转呢?我的意思是,如果我有更高的格式,并且想将其更改为第一个格式。
Arslan Tariq

2
您可以使用@ArslanTariq momentObject.valueOf()从纪元获取毫秒数。
WesternGun

8
moment().format();                                // "2019-08-12T17:52:17-05:00" (ISO 8601, no fractional seconds)
moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Monday, August 12th 2019, 5:52:00 pm"
moment().format("ddd, hA");                       // "Mon, 5PM"

1
如果您解释此代码如何解决OP的问题,将对您有所帮助。
罗伯特·哥伦比亚

5

要确定输出日期,请使用format。第二点参数用于解析-但是,如果省略该参数,testDate则将引起弃用警告

弃用警告:提供的值不是公认的RFC2822或ISO格式...

要忽略此警告,您应该提供解析格式


太好了,首先我必须提供我们日期格式的标识符(格式),然后是所需格式。很好的例子。
Sudhir K Gupta,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.