datetime - 使用 moment.js 使用语言环境而不是显式格式设置日期格式

标签 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"

我们怎样才能实现这一目标?

最佳答案

如果您的输入字符串具有特定于区域设置的格式,则可以使用 moment 的 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>

关于datetime - 使用 moment.js 使用语言环境而不是显式格式设置日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41156791/

相关文章:

date - 将字符串时间戳转换为日期会导致重置为 UNIX 纪元

php - MySQL 中的 Timediff 错误值

mysql - 选择彼此相差超过一秒的行MYSQL

javascript - 无法在格式为 dd/MM/yyyy HH :mm 的 javascript 中对日期时间进行排序

javascript - 使用 moment timezone js 将日期字符串转换为带时区的日期

javascript - 如何使用 JavaScript 或 moment 从 2 个日期创建新的格式化日期

javascript - 使用 moment react setState 更改小时

python - Matplotlib 仅显示年份,而不是包含日期的 x 轴中的每年 1 月 1 日

objective-c - 代表用户格式化输入的时间字符串

javascript - 使用 html 的 javascript 显示特定时区的日期/日期和时间