我想以dd MMM, yyyy
格式设置本地化日期。
Ex.
In en => 30 Jan, 2019
In fr => 30 janv., 2019
In zh-CN => 30日 1月, 2019年
and so on.
我正在使用javascript的toLocaleDateString
()方法。以下是我的代码:
var dateObj = new Date(parseInt(timestamp));
var date = dateObj.toLocaleDateString(window.userLang, { day: 'numeric', month: 'short', year: 'numeric' });
好吧,它工作正常,但不是我想要的格式。
例如: 对于英语,其翻译像是根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
于2019年1月30日进行翻译在Angular中,我们可以通过将所需的格式传递给datePipe.transform()来实现此目标,如下所示:
import { Pipe, PipeTransform } from '@angular/core';
import { DatePipe } from '@angular/common';
@Pipe({
name: 'dateFormatPipe',
})
export class dateFormatPipe implements PipeTransform {
transform(value: string) {
let datePipe = new DatePipe((<any>window).userLang);
value = datePipe.transform(value, 'dd MMM, yyyy');
return value;
}
}
它将打印输出,如我前面所述:
In en => 30 Jan, 2019
In fr => 30 janv., 2019
In zh-CN => 30日 1月, 2019年
javascript / jquery中有没有这种方法来实现这一目标?
答案 0 :(得分:1)
如果您想为每种语言强制使用特定格式, toLocaleString 可以帮助您处理每种组件的语言部分,然后按所需顺序排列组件,例如
function formatDate(date, langCode) {
var day = date.toLocaleString(langCode, {day: '2-digit'}); // DD
var month = date.toLocaleString(langCode, {month: 'short'}); // MMM
var year = date.toLocaleString(langCode, {year: 'numeric'}); // YYYY
return `${day} ${month}, ${year}`;
}
// Examples
var d = new Date();
['en', // English
'ja', // Japanese
'zh-CN', // Chinese, simplified
'fr', // French
'ar' // Arabic
].forEach(lang => console.log(formatDate(d, lang)));
// Attempt to use prefered browser language
console.log(formatDate(d, navigator.languages));
但是,这可能并不适合每种情况,您仍然需要确定使用哪种语言。您可以尝试navigator.languages,它的实验性,但相当不错的支持。不过,我认为用户很少将其设置为自己想要的价值,只是接受默认我不相信它。但是,如果希望某人使用浏览器,只要日期格式明确(例如DD MMM,YYYY),他们就会以浏览器的默认语言理解日期。
有许多duplicates用于确定语言,并且某些实现可能不支持某些语言。
PS。日期格式化有很多不同的标记集,我已经将它们用于moment.js,还有许多其他标记集。