[英]Adding moment locale break the initial date
我暫時無法解決一個奇怪的問題:
我有我的約會日期: Wed Feb 28 2018 16:24:37 GMT+0100 (CET)
日Wed Feb 28 2018 16:24:37 GMT+0100 (CET)
當我添加import 'moment/locale/fr';
同一天成為Sun Jan 28 2018 16:24:37 GMT+0100 (CET)
誰能解釋我在做什么錯?
這是完整的例子
import React from 'react';
import moment from 'moment';
// ====== adding locale break the date ======= //
// import 'moment/locale/fr';
// time value is : Wed Feb 28 2018 16:24:37 GMT+0100 (CET)
const Time = ({ time }) => (
<p>
{moment(time).format('DD-MM-YYYY HH:mm:ss')}
</p>
);
// output without locale/fr is : 28-02-2018 16:24:37
// output with locale/fr is : 28-01-2018 16:24:37
之后,我將使用.fromNow()
矩函數顯示現在與給定時間之間的時間距離。
如果您在不提供輸入格式的情況下解析字符串,moment.js將首先嘗試ISO 8601格式。 如果不匹配,它將退回到內置解析器。 您應該得到警告,不要這樣做(因為這是一個壞主意)。
如果您提供帶有法語語言環境文件的解析格式('ddd MMM DD YYYY HH:mm:ss ZZ'),並且未指定輸入字符串為英語,則該字符串似乎像是法語一樣被解析而“ Feb”被解析為“ janvier”(一月)而不是février(二月)。
您需要提供輸入字符串的解析格式和語言:
moment('Wed Feb 28 2018 16:24:37 GMT+0100 (CET)', 'ddd MMM DD YYYY HH:mm:ss ZZ', 'en')
// Without providing parse format console.log(moment('Wed Feb 28 2018 16:24:37 GMT+0100 (CET)').format('DD-MM-YYYY HH:mm:ss')); // With parse format but not input langauge console.log(moment('Wed Feb 28 2018 16:24:37 GMT+0100 (CET)', 'ddd MMM DD YYYY HH:mm:ss ZZ').format('DD-MM-YYYY HH:mm:ss')); // With parse format and input langauge (recommended approach) console.log(moment('Wed Feb 28 2018 16:24:37 GMT+0100 (CET)', 'ddd MMM DD YYYY HH:mm:ss ZZ', 'en').format('DD-MM-YYYY HH:mm:ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/locale/fr.js"></script>
嘗試這樣的事情(我們需要從moment/locale/fr
導入,以確保它在客戶端加載)。 因此,以英語解析,然后將語言環境切換為所需的語言環境,然后使用fromNow
輸出fromNow
:
import moment from 'moment';
import momentFr from 'moment/locale/fr';
const Time = ({ time }) => (
<p>
{moment(time, 'ddd MMM DD YYYY HH:mm:ss Z').locale('fr').fromNow()}
</p>
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.