我正在构建一个用Typescript编写的应用程序,它使用Moment.js和moment-timezone的功能。我需要在应用程序中本地化的日期和时间戳,以便在主app.ts
文件中使用设备的语言设置时刻的语言环境。
更新:以下是包含其他评论的示例文件的要点 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());
问题是,在此实用程序模块中,当我导入时刻时区时,它默认为' en'即使我在主app.ts
文件中全局设置了时刻的区域设置,也可以使用区域设置。
以下是我的两种实用工具方法,如果将时间 - 时区默认为' en'?
,如何本地化相对日期字符串和月份?我尝试将.locale(locale)添加到时刻方法,但这并没有改变任何东西。如果我导入了一个时刻而不是一些时间区域,这些时间区域适用于某些方法,但在任何需要使用时区实用程序的任何方法上都失败了。
日期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;
};
答案 0 :(得分:1)
我在Typescript中遇到了同样的问题。我想使用moment-timezone将时区设置为欧洲/布鲁塞尔,并将语言环境设置为比利时荷兰语,我这样解决了这个问题:
import 'moment/locale/nl-be';
import * as momentTZ from 'moment-timezone';
momentTZ.locale("nl-be");
momentTZ.tz.setDefault("Europe/Brussels");
如果您想在项目中使用一下时刻,请立即使用momentTZ,就像这样。
const exampleDate = momentTZ().format('dddd D MMMM');
答案 1 :(得分:0)
您是否尝试过.format('')
?
moment.locale(); // en
moment().format('LT'); // 6:27 PM
moment().format('LTS'); // 6:27:51 PM
moment().format('L'); // 05/31/2017
moment().format('l'); // 5/31/2017
moment().format('LL'); // May 31, 2017
moment().format('ll'); // May 31, 2017
moment().format('LLL'); // May 31, 2017 6:27 PM
moment().format('lll'); // May 31, 2017 6:27 PM
moment().format('LLLL'); // Wednesday, May 31, 2017 6:27 PM
moment().format('llll'); // Wed, May 31, 2017 6:27 PM
更新:还要确保您的时刻lib是包含区域设置的时刻: https://momentjs.com/指定有两个时刻库,( moment-with-locales.js )且没有区域设置( moment.js )。
答案 2 :(得分:0)
您输入错误的时刻。不要这样做:
import * as moment from 'moment/min/moment-with-locales';
这样做:
import * as moment from 'moment';
它将在您使用它们时加载各个语言环境(在Node.js上),然后您将共享时刻 - 时区使用的相同时刻依赖关系,因此您的全局语言环境将继续运行。