使用locale而不是显式格式使用moment.js格式化日期

时间:2016-12-15 05:06:01

标签: datetime momentjs datetime-format

我们日期选择器的日期为 DD / MM / YYYY h:mm A 格式。 目前,我们需要为moment.js明确提供一种格式,以便正确解释此日期如下:

var dateFormats = ['DD/MM/YYYY h:mm A'];
var tmp1 = moment(date, dateFormats).format('YYYY-MM-DD HH:mm');

我们倾向于避免使用硬编码日期格式,而是能够按如下方式应用语言环境:

var locale = (window.navigator.userLanguage || window.navigator.language).toLowerCase();
moment.locale(locale);
var tmp1 = moment(date).format('YYYY-MM-DD HH:mm');

目前,执行以下内容(在应用上述语言环境后):

moment('15/12/2016 2:27 PM').format('YYYY/MM/DD h:mm A');

给出:

"2017/03/12 2:27 PM"

需要时:

"2016/12/15 2:27 PM"

我们如何实现这一目标?

1 个答案:

答案 0 :(得分:4)

如果您的输入字符串具有特定于语言环境的格式,则可以使用片刻localeData来解析它。使用longDateFormat(dateFormat);,您可以获得本地化格式。

这是一个使用en-au语言环境的工作示例:

moment.locale('en-au');
var input = '15/12/2016 2:27 PM';
var s = moment(input).format('YYYY/MM/DD h:mm A'); // Gives Deprecation warning
console.log(s); // Invalid date

// Get locale data
var localeData = moment.localeData();
var format = localeData.longDateFormat('L') + ' ' + localeData.longDateFormat('LT');
s = moment(input, format).format('YYYY/MM/DD h:mm A');
console.log(s); // 2016/12/15 2:27 PM
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.0/moment-with-locales.min.js"></script>