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()コードで使用していますか?そうでない場合、使用しているプラ​​グインが存在しないメソッドを不適切に呼び出しています。
穀類使用2013

正確なエラーとスタックトレースで質問を更新し、「replace」を呼び出すメソッドを使用しました。私は直接replaceを直接呼び出していません
Warz

回答:


591

の2番目の引数moment()は、表示形式ではなく解析形式です。

そのためには、.format()メソッドが必要です:

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

また、大文字と小文字が区別されることにも注意してください。月、日、年の形式は大文字にする必要があります。


優れた。私は最初にこのmoment()。format()のように使用しようとしましたが、失敗しました。ありがとう
Warz

var obj = {end_date:moment($ scope.activity.endDate).format( 'MM / DD / YYYY')};
マイケルJ.カルキンス2013

@MichaelCalkins申し訳ありません。それは何のためにあるのです?そして、なぜAngularJS($scope)への追加参照があるのですか?
Jonathan Lonowski 2013

@JonathanLonowskiそれは任意の変数である可能性があります。私はたまたまプログラミングをしていて、この答えを探していました。ほんの一例です。
マイケルJ.カルキンス2013

formatを使用するときはいつでも、date()を呼び出すことができません。したがって、( "DD-MM-YYYY")形式から1日を取得するために、ある種のサブストリング構成を使用する必要がありました。
Henk Jansen 2013年

49

moment.jsを含め、以下のコードを使用して日付をフォーマットできます

var formatDate= 1399919400000;

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

私の出力は「2014年5月13日」です


1
どうすればそれを元に戻すことができますか?つまり、後のフォーマットがあり、それを最初のフォーマットに変更したい場合です。
Arslan Tariq 2017年

2
momentObject.valueOf()エポックからミリ秒を取得するために使用できる@ArslanTariq 。
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

fromdate出力日付を使用しますformat。2番目の瞬間の引数は解析用ですが、省略した場合、testDate非推奨の警告が表示されます

非推奨の警告:提供された値は、認識されているRFC2822またはISO形式ではありません...

この警告を省略するには、解析形式を指定する必要があります


素晴らしい、最初に日付形式の識別子(形式)を指定する必要があり、次に形式を要求します。いい例です。
Sudhir K Gupta
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.