Формат даты toLocaleDateString в Javascript - PullRequest
0 голосов
/ 30 января 2019

Я хочу отформатировать свою локализованную дату в формате 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' });

Ну, он работает нормально, но не в том формате, который мне нужен.

Пример: Для английского это перевод, как 30 января 2019 года на основе https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

В 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 для достижения этой цели?

1 Ответ

0 голосов
/ 31 января 2019

Если вы хотите принудительно установить определенный формат для каждого языка, 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 ​​, это экспериментально, но достаточно хорошо поддерживается.Однако я не доверяю этому, так как считаю, что пользователи редко устанавливают желаемые значения и просто принимают значения по умолчанию.Однако, если кто-то использует браузер, надеюсь, он поймет дату на языке браузера по умолчанию, при условии, что она имеет однозначный формат (например, ДД МММ, ГГГГ).

Существует множество дубликатов для определения языка, и, вероятно, существуют языки, которые не поддерживаются определенными реализациями.

PS.Существует много разных наборов токенов для форматирования даты, я использовал их для moment.js , есть много других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...