使用Moment.js格式化日期

我有一个这样格式的字符串:

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?我用错方法了吗?


编辑

我还应该提到,我使用的是Moment.js的预打包版本,它是为Meteor.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)
1013614 次浏览

moment()的第二个参数是< em > < / em >格式进行解析格式,而不是显示格式。

为此,你需要.format()方法:

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

还要注意,大小写确实很重要。对于Month、Day of Month和Year,格式应为大写。

包括moment.js和使用下面的代码,你可以格式化你的日期

var formatDate= 1399919400000;


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

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

从输出日期开始使用format。Second moment参数是用于解析的——但是如果你省略了它,那么你testDate将会引起弃用警告

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

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


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


msg.innerText= s;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>


<div id="msg"></div>

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

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


let s= moment(testDate, 'ddd MMM D YYYY HH:mm:ss ZZ').format('MM/DD/YYYY');


console.log(s);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

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"

可能这有助于一些人谁正在寻找多种日期格式一个接一个地自愿或意外。 请查看代码: 我在当前日期上使用moment.js格式函数(今天是29-06-2020) var startDate = moment(new Date()).format('MM/DD/YY');结果:06/28/20 < / p >

发生的事情是它只保留了年份部分:20作为"06/28/20",之后如果我运行语句: 新日期(startDate可以) 结果是“星期一6月28日1920 00:00:00 GMT+0530(印度标准时间)”,

然后,当我使用另一种格式"06/28/20": startDate = moment(startDate).format('MM-DD-YYYY');结果:06-28-1920,在谷歌chrome和firefox浏览器中,它在第二次尝试时给出正确的日期:06-28-2020。但是在IE中它有问题,从中我明白我们可以在给定的日期上应用一种日期格式,如果我们想要第二个日期格式,它应该应用于新的日期,而不是第一个日期格式的结果。 并且还观察到,第一次应用'MM-DD-YYYY'和下一个'MM-DD-YY'在IE中工作。 为了更清楚地理解,请在链接中找到我的问题: 在ie11中使用Momentjs日期格式时出现日期错误 < / p >

你可能不再需要Moment.js了

Moment是一个很棒的时间操作库,但它被认为是一个遗产项目,团队建议使用其他

date-fns是最好的轻量级库之一,它是模块化的,所以你可以选择你需要的函数并减小包的大小(问题 &声明)。

另一个反对在现代应用程序中使用Moment的常见论点是它的大小。Moment不适合现代的“摇树”;算法,所以它倾向于增加web应用程序包的大小。

import { format } from 'date-fns' // 21K (gzipped: 5.8K)
import moment from 'moment' // 292.3K (gzipped: 71.6K)

使用date-fns格式化日期:

// moment.js
moment().format('MM/DD/YYYY');
// => "12/18/2020"


// date-fns
import { format } from 'date-fns'
format(new Date(), 'MM/dd/yyyy');
// => "12/18/2020"

关于备忘单的更多信息,包括可以用来替换moment.js: You-Dont-Need-Momentjs的函数列表

var moment = require('moment');


let yourdate = '2021-01-02T07:57:45.121Z'; // for example


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


// output : 01-02-2021




moment(yourdate).format('DD-MMM-YYYY');


// output : 01-Jan-2021

你可以通过“;L"format方法,用于处理国际化…

moment.locale('en-US');
moment().format("L");
> "06/23/2021"


moment.locale('fr');
moment().format("L");
> "23/06/2021"

其他长日期格式(fr locale):

LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY HH:mm',
LLLL : 'dddd D MMMM YYYY HH:mm'

Docs: https://momentjs.com/docs/#/displaying/format/(参见“本地化格式”;)

获取当前UTC时间,格式为YYYY-MM-DD HH:MM:ss。毫秒带时区,使用时刻格式,如下所示

moment().utc().format('Y-MM-DD HH:mm:ss.SSS Z').

输出

2022-09-20 15:28:39.446 +0000