簡體   English   中英

使用 Moment.js 格式化日期

[英]Format date with 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) 

moment()的第二個參數是解析格式而不是顯示格式。

為此,您需要.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”

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

Moment 是一個很好的時間操作庫,但它被認為是一個遺留項目,團隊建議使用其他

date-fns是最好的輕量級庫之一,它是模塊化的,因此您可以選擇所需的功能並減少包大小( issue & statement )。

另一個反對在現代應用程序中使用 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

對於 fromating 輸出日期使用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>

要使用 YYYY-MM-DD HH:MM:ss.Millisecond 中的當前 UTC 時間,使用時刻格式如下

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

Output

2022-09-20 15:28:39.446 +0000
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

這可能會幫助那些自願或意外地一個接一個地尋找多種日期格式的人。 請找到代碼:我在當前日期使用 moment.js 格式函數(今天是 29-06-2020) var startDate = moment(new Date()).format('MM/DD/YY'); 結果:06/28/20

發生的事情是它只保留年份部分 :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 中工作。 為了清楚地理解,請在鏈接中找到我的問題: 在 IE 11 中使用 Momentjs 日期格式時日期出錯

您可以將“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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM