【发布时间】:2017-11-01 10:02:26
【问题描述】:
我正在构建一个使用 Typescript 编写的应用程序,它使用 Moment.js 和 moment-timezone 的功能。我需要本地化应用程序中的日期和时间戳,因此在主 app.ts 文件中,我使用设备的语言设置了时刻的区域设置。
更新:这里是带有附加 cmets 的示例文件的要点 https://gist.github.com/spstratis/fa853f9750a095d4acd0d1196a285be9
app.ts
import * as moment from 'moment/min/moment-with-locales';
let language = appUtil.getPhoneLanguage();
moment.locale(language);
// the expected locale is printed
console.log("Moment Locale = " + moment.locale());
问题是,在此实用程序模块中,当我导入 moment-timezone 时,即使我在主 app.ts 文件中全局设置了 moment 的语言环境,它也默认为“en”语言环境。
以下是我的两个实用方法,如果 moment-timezone 将它们默认为“en”,我如何本地化相对日期字符串和月份?
我尝试将 .locale(locale) 添加到 moment 方法,但这并没有改变任何东西。如果我导入了对某些方法有效但在任何需要使用时区实用程序的方法上失败的时刻而不是时刻时区。
date-util.ts
import * as moment from 'moment-timezone';
export function dateRelativeTime(value): string {
let timezoneId = appCache.getTimezoneId();
let localTime = _getLocalUtcDateString(value, timezoneId);
let dateMoment = moment(localTime, "MM/DD/YYYY hh:mm:ss A");
let formatedDate = dateMoment.tz(timezoneId).fromNow();
return formatedDate;
};
export function localizedMonths(): ValueList {
let m = moment("2016");
let months = new ValueList([]);
for (var i = 0; i < 12; i++) {
months.push({ ValueMember: [i + 1], DisplayMember: m.month(i).format('MMMM') });
}
return months;
};
【问题讨论】:
-
你能用 TS 和两个 moment 库设置一个要点吗?
-
@BogdanBiv 使用了我所有的代码?
-
附带说明:您可以使用
localeData = moment.localeData(); localeData.months();获取月份名称的本地化数组,请参阅文档中的Accessing locale specific functionality。 -
@Stavros_S:这正是重点:将您的问题隔离在您可以共享的较小项目中。
-
@VincenzoC - 或者只是
moment.months()
标签: javascript date datetime typescript momentjs