在处理阿拉伯语言环境时,正确格式化本地UTC日期字符串
Properly formatting a local UTC date string when dealing with an Arabic locale
我使用moment.js和moment-timezone来获取本地utc日期字符串。我创建了下面的函数来实现这一点。当尝试在处理阿拉伯语言环境时使用此方法时,我将返回无效日期。
function _getLocalUtcDateString(utcDateString, timezoneId) {
var utcMoment = moment.utc(utcDateString, 'MM/DD/YYYY hh:mm:ss A').format('MM/DD/YYYY hh:mm:ss A');
var localTimeTz = moment.utc(utcMoment).tz(timezoneId).format('MM/DD/YYYY hh:mm:ss A');
return localTimeTz;
}
如果我用以下参数_getLocalUtcDateString("11/2/2016 4:45:47 PM", "America/New_York")
调用它并设置moment.locale('ar')
,它会因无效日期而失败。问题似乎是utcMoment
,当lacale是阿拉伯语时,这个值等于١١/٠٢/٢٠١٦ ٠٤:٤٥:٤٧ ص
,这导致moment.utc(utcMoment).tz(timezoneId).format('MM/DD/YYYY hh:mm:ss A');
失败。
如果您打开控制台,您将看到以下警告消息:
弃用警告:提供的值不是可识别的ISO格式。moment构造返回到js Date(),它在所有浏览器和版本中都不可靠。不鼓励使用非ISO日期格式,并将在即将发布的主要版本中删除。更多信息请访问http://momentjs.com/guides/#/warnings/js-date/。
所以问题是你试图解析一个字符串,不是在一个可识别的ISO格式(见解析文档的更多信息)。
要解决这个问题,只需删除函数第一行中不必要的format()
,如下面的工作代码片段所示:
function _getLocalUtcDateString(utcDateString, timezoneId) {
var utcMoment = moment.utc(utcDateString, 'MM/DD/YYYY hh:mm:ss A');
var localTimeTz = moment.utc(utcMoment).tz(timezoneId).format('MM/DD/YYYY hh:mm:ss A');
return localTimeTz;
}
moment.locale('ar');
var res = _getLocalUtcDateString("11/2/2016 4:45:47 PM", "America/New_York");
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.16.0/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.7/moment-timezone-with-data-2010-2020.min.js"></script>
相关文章:
- jQuery中是否内置了任何字符串格式化函数
- j查询utc offSets的时差
- 将日期和时间转换为UTC格式的日期-Javascript
- Javascript格式UTC日期
- 将字符串转换为格式化日期
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- javascript/jquery将utc转换为短格式的本地时间
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 在HTML画布上格式化文本
- 用于高级文本的格式化工具
- 使用模式格式化Number类型输入中的值
- 将格式化的纯文本转换为HTML
- 如何配置WebStorm以正确格式化生成器函数
- 如何将日期字符串视为格式化数组[EYEAR,MONTH,DAY]
- 如何在时间标签和相同的类中以UTC格式重新格式化ISO 8601时间戳,并通过JavaScript根据用户区域设置和时区
- Angularjs:带日期助手的格式化UTC时间的时间戳
- 是否可以在不转换为UTC的情况下格式化日期
- 从格式化日期获取UTC时间戳-javascript
- 在处理阿拉伯语言环境时,正确格式化本地UTC日期字符串
- Javascript日期格式化星期五六月21 00:00:00 UTC+0100 2013到iso 8601(2013-