338

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

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) 
4

8 回答 8

737

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

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

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

另请注意,案例确实很重要。对于月份、月份和年份,格式应为大写。

于 2013-04-13T23:23:58.983 回答
57

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

var formatDate= 1399919400000;

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

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

于 2014-05-13T05:59:54.670 回答
29
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"
于 2019-08-12T12:35:50.820 回答
13

你可能不再需要 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

于 2020-12-18T14:56:50.630 回答
7

对于确定输出日期,请使用format. 第二个时刻参数用于解析 - 但是如果您省略它,那么您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>

于 2019-04-15T04:07:55.210 回答
6
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
于 2021-03-14T12:05:47.517 回答
2

您可以将“L”传递给format处理国际化的方法......

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

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

其他长日期格式(fr语言环境):

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'
于 2021-06-23T08:15:11.503 回答
1

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

发生的事情是它只保留年份部分:20 作为“06/28/20”,如果我运行语句:new Date(startDate) 结果是“Mon Jun 28 1920 00:00:00 GMT+0530 (India标准时间)”,

然后,当我在“06/28/20”上使用另一种格式时: startDate = moment(startDate ).format('MM-DD-YYYY'); 结果:06-28-1920,在 google chrome 和 firefox 浏览器中,第二次尝试的正确日期为:06-28-2020。但是在 IE 中存在问题,据我了解,我们可以在给定日期应用一个日期格式,如果我们想要第二个日期格式,它应该应用于新日期而不是第一个日期格式结果。并且还观察到第一次应用 'MM-DD-YYYY' 和下一个 'MM-DD-YY' 在 IE 中工作。为了清楚地理解,请在链接中找到我的问题: Date go wrong when using Momentjs date format in IE 11

于 2020-06-28T18:45:32.710 回答