2989

JavaScriptで、日付オブジェクトをフォーマットして印刷するにはどうすればよい10-Aug-2010ですか?

4

59 に答える 59

2580

現在受け入れられている回答よりもフォーマットの制御がわずかに少ない必要がある場合は、Date#toLocaleDateStringを使用して、標準のロケール固有のレンダリングを作成できます。localeandoptions引数を使用すると、アプリケーションはフォーマット規則を使用する言語を指定し、レンダリングをある程度カスタマイズできます。

オプションの主な例:

  1. 日:
    その日の表現。
    可能な値は「数値」、「2桁」です。
  2. 平日:平日
    の表現。
    可能な値は「narrow」、「short」、「long」です。
  3. 年:年
    の表現。
    可能な値は「数値」、「2桁」です。
  4. 月:月
    の表現。
    可能な値は、「数値」、「2桁」、「狭い」、「短い」、「長い」です。
  5. 時間:時間
    の表現。
    可能な値は「数値」、「2桁」です。
  6. 分:分 の表現。
    可能な値は「数値」、「2桁」です。
  7. second:秒
    の表現。
    可能な値は「数値」、2桁」です。

これらのキーはすべてオプションです。要件に基づいてオプション値の数を変更できます。これには、各日時の期間の存在も反映されます。

注:コンテンツオプションのみを構成したいが、現在のロケールを使用したい場合はnull、最初のパラメーターを渡すとエラーが発生します。undefined代わりに使用してください。

異なる言語の場合:

  1. 「en-US」:英語の場合
  2. 「hi-IN」:ヒンディー語の場合
  3. 「ja-JP」:日本語用

より多くの言語オプションを使用できます。

例えば

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today  = new Date();

console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016

toLocaleString()同じ目的でこのメソッドを使用することもできます。唯一の違いは、この関数はオプションを渡さない時間を提供することです。

// Example
9/17/2016, 1:21:34 PM

参照:

于 2015-12-01T08:11:09.987 に答える
1634

DateTimeFormatカスタム区切りの日付形式の場合、オブジェクト( ECMAScript Internationalization APIの一部)から日付(または時刻)コンポーネントを引き出してから、必要な区切り文字を使用して文字列を手動で作成する必要があります。

これを行うには、を使用できますDateTimeFormat#formatToParts。配列を分解することもできますが、配列の出力はロケールに依存するため、これは理想的ではありません。

{ // example 1
   let f = new Intl.DateTimeFormat('en');
   let a = f.formatToParts();
   console.log(a);
}
{ // example 2
   let f = new Intl.DateTimeFormat('hi');
   let a = f.formatToParts();
   console.log(a);
}

フォーマット配列を結果の文字列にマップすることをお勧めします。

function join(t, a, s) {
   function format(m) {
      let f = new Intl.DateTimeFormat('en', m);
      return f.format(t);
   }
   return a.map(format).join(s);
}

let a = [{day: 'numeric'}, {month: 'short'}, {year: 'numeric'}];
let s = join(new Date, a, '-');
console.log(s);

DateTimeFormatを使用して1つずつ 部分を引き出すこともできますが、このメソッドを使用する場合、2020年3月の時点で、分と秒の先行ゼロに関してECMAScript実装にバグDateTimeFormat#formatがあることに注意してください(このバグ上記のアプローチによって回避されます)。

let d = new Date(2010, 7, 5);
let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
let mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d);
let da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d);
console.log(`${da}-${mo}-${ye}`);

日付と時刻を操作する場合 、フィールドには多くの隠れた複雑さがあるため、通常はライブラリ( moment.jsluxonなど)を使用する価値があります。

上記のソリューションで使用されているECMAScriptInternationalizationAPIは、IE10ではサポートされていないことに注意してください(2020年2月の世界のブラウザー市場シェアは0.03% )。

于 2010-08-23T23:35:17.063 に答える
673

プレーンJavaScriptを使用して日付をすばやくフォーマットする必要がある場合は、、、、getDateおよびgetMonth + 1:を使用getFullYearします。getHoursgetMinutes

var d = new Date();

var datestring = d.getDate()  + "-" + (d.getMonth()+1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();

// 16-5-2015 9:50

または、ゼロを埋め込む必要がある場合:

var datestring = ("0" + d.getDate()).slice(-2) + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" +
    d.getFullYear() + " " + ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2);

// 16-05-2015 09:50
于 2015-05-16T07:02:33.857 に答える
663

date.formatライブラリを使用します。

var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

戻り値:

Saturday, June 9th, 2007, 5:46:21 PM 

npmのdateformat

http://jsfiddle.net/phZr7/1/

于 2010-08-23T23:35:47.010 に答える
516

さて、私が欲しかったのは、今日の日付をのようなMySQLに適した日付文字列に変換2012-06-23し、その文字列をクエリの1つでパラメータとして使用することでした。私が見つけた簡単な解決策はこれです:

var today = new Date().toISOString().slice(0, 10);

上記のソリューションでは、タイムゾーンのオフセットが考慮されていないことに注意してください。

代わりにこの関数の使用を検討してください。

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

これにより、1日の始まり/終わり頃にこのコードを実行している場合に、正しい日付が得られます。

var date = new Date();

function toLocal(date) {
  var local = new Date(date);
  local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  return local.toJSON();
}

function toJSONLocal(date) {
  var local = new Date(date);
  local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
  return local.toJSON().slice(0, 10);
}

// check out your devtools console
console.log(date.toJSON());
console.log(date.toISOString());
console.log(toLocal(date));

console.log(toJSONLocal(date));

于 2012-06-23T18:49:42.590 に答える
365

カスタムフォーマット機能:

固定フォーマットの場合、単純な関数がその役割を果たします。次の例では、国際形式YYYY-MM-DDを生成します。

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1; //Month from 0 to 11
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

OP形式は​​次のように生成できます。

function dateToYMD(date) {
    var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var d = date.getDate();
    var m = strArray[date.getMonth()];
    var y = date.getFullYear();
    return '' + (d <= 9 ? '0' + d : d) + '-' + m + '-' + y;
}
console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

注:ただし、通常、JavaScript標準ライブラリを拡張することはお勧めできません(たとえば、この関数をDateのプロトタイプに追加することによって)。

より高度な機能では、フォーマットパラメータに基づいて構成可能な出力を生成できます。

フォーマット関数を書くのが長すぎる場合、それを実行するライブラリがたくさんあります。他のいくつかの答えはすでにそれらを列挙しています。しかし、依存関係が増えると、それに対抗することもできます。

標準のECMAScriptフォーマット関数:

ECMAScriptの最新バージョン以降、Dateクラスにはいくつかの特定のフォーマット関数があります。

toDateString:実装に依存し、日付のみを表示します。

https://262.ecma-international.org/#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString:ISO8601の日付と時刻を表示します。

https://262.ecma-international.org/#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON:JSONのStringifier。

https://262.ecma-international.org/#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString:実装に依存し、ロケール形式の日付。

https://262.ecma-international.org/#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString:実装に依存し、ロケール形式の日付と時刻。

https://262.ecma-international.org/#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString:実装に依存し、ロケール形式の時間。

https://262.ecma-international.org/#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString:日付の汎用toString。

https://262.ecma-international.org/#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 21 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

注:これらのフォーマットからカスタム出力を生成することが可能です>

new Date().toISOString().slice(0,10); //return YYYY-MM-DD

スニペットの例:

console.log("1) "+  new Date().toDateString());
console.log("2) "+  new Date().toISOString());
console.log("3) "+  new Date().toJSON());
console.log("4) "+  new Date().toLocaleDateString());
console.log("5) "+  new Date().toLocaleString());
console.log("6) "+  new Date().toLocaleTimeString());
console.log("7) "+  new Date().toString());
console.log("8) "+  new Date().toISOString().slice(0,10));

標準関数のロケールの指定:

上記の標準機能の一部は、ロケールに依存しています。

  • toLocaleDateString()
  • toLocaleTimeString()
  • toLocalString()

これは、異なる文化が異なる形式を使用し、異なる方法で日付または時刻を表現するためです。この関数はデフォルトで、実行するデバイスで構成された形式を返しますが、これは引数(ECMA-402)を設定することで指定できます。

toLocaleDateString([locales[, options]])
toLocaleTimeString([locales[, options]])
toLocaleString([locales[, options]])
//e.g. toLocaleDateString('ko-KR');

2番目のoptionパラメーターは、選択したロケール内でより具体的な形式を構成できるようにします。たとえば、月はフルテキストまたは省略形で表示できます。

toLocaleString('en-GB', { month: 'short' })
toLocaleString('en-GB', { month: 'long' })

スニペットの例:

console.log("1) "+  new Date().toLocaleString('en-US'));
console.log("2) "+  new Date().toLocaleString('ko-KR'));
console.log("3) "+  new Date().toLocaleString('de-CH'));

console.log("4) "+  new Date().toLocaleString('en-GB', { hour12: false }));
console.log("5) "+  new Date().toLocaleString('en-GB', { hour12: true }));

ロケールに関するいくつかのグッドプラクティス:

  • ほとんどの人は、日付が外国人の形式で表示されることを好まないため、可能な限りデフォルトのロケールを維持します(どこでも「en-US」を設定しすぎます)。
  • UTCから/への変換の実装は困難な場合があります(DST、1時間の倍数ではないタイムゾーンなどを考慮する)。可能であれば、十分にテストされたライブラリを使用してください。
  • ロケールが国と相関していると想定しないでください。いくつかの国には多くの国があります(カナダ、インドなど)。
  • 非標準的な方法でロケールを検出することは避けてください。ここでは、キーボードレイアウトの検出、地理的な場所によるロケールの検出など、複数の落とし穴について読むことができます。
于 2017-04-12T09:09:53.263 に答える
185

プロジェクトですでにjQueryUIを使用している場合は、次のように実行できます。

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

日付ピッカーの日付形式のオプションをいくつかここで利用できます。

于 2014-07-09T13:52:27.173 に答える
153

非標準のDateメソッドを使用できると思いますtoLocaleFormat(formatString)

formatString:strftime() Cの関数で期待されるのと同じ形式のフォーマット文字列。

var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011

参照:

追加するために編集:toLocaleFormat上記のリンクが示すように、現在は非推奨になっています。

于 2011-12-30T05:33:07.033 に答える
117

プレーンJavaScriptは、小規模なワンタイマーに最適です。

一方、より多くの日付が必要な場合は、MomentJSが優れたソリューションです。

例えば:

moment().format('YYYY-MM-DD HH:m:s');     // now() -> 2015-03-24 14:32:20
moment("20111031", "YYYYMMDD").fromNow(); // 3 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 11 hours ago
moment().endOf('day').fromNow();          // in 13 hours
于 2014-12-24T10:15:23.993 に答える
112

最新のブラウザ(*)では、次のようにすることができます。

var today = new Date().toLocaleDateString('en-GB', {
    day : 'numeric',
    month : 'short',
    year : 'numeric'
}).split(' ').join('-');

今日実行された場合の出力(2016年1月24日):

'24-Jan-2016'

(*) MDNによると、「最新のブラウザ」とは、Chrome 24以降、Firefox 29以降、Internet Explorer 11以降、Edge 12以降、Opera 15以降、Safariのナイトリービルドを意味します。

于 2016-01-24T21:09:12.027 に答える
58

1行で要求された形式-ライブラリもDateメソッドもありません。正規表現だけです。

var d = (new Date()).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3');
// date will be formatted as "14-Oct-2015" (pass any date object in place of 'new Date()')

私のテストでは、これは主要なブラウザー(Chrome、Safari、Firefox、IE)で確実に機能します。@ RobGが指摘したように、Date.prototype.toString()の出力は実装に依存するため、国際的または非ブラウザー実装の場合、出力をテストして、JavaScriptエンジンで正しく機能することを確認してください。正規表現の置換を行う前に、コードを追加して文字列出力をテストし、期待どおりであることを確認することもできます。

于 2015-10-14T17:25:00.983 に答える
45

@Sébastien-代替のすべてのブラウザサポート

new Date(parseInt(496407600)*1000).toLocaleDateString('de-DE', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\./g, '/');

ドキュメント: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString


Date.toLocaleDateStringに基づく高次のタグ付きテンプレートリテラルの例:

const date = new Date(Date.UTC(2020, 4, 2, 3, 23, 16, 738));
const fmt = (dt, lc = "en-US") => (str, ...expr) =>
    str.map((str, i) => str + (expr[i]?dt.toLocaleDateString(lc, expr[i]) :'')).join('')

console.log(fmt(date)`${{year: 'numeric'}}-${{month: '2-digit'}}-${{day: '2-digit'}}`);
// expected output: "2020-05-02"
于 2014-10-02T16:40:54.533 に答える
40

OK 、最近JavaScriptで日付をフォーマットするのに非常に便利なIntlと呼ばれるものがあります。

以下のようにあなたの日付:

var date = '10/8/2010';

そして、以下のようにnew Date()を使用してDateに変更します。

date = new Date(date);

そして今、あなたは以下のようなロケールのリストを使って好きなようにそれをフォーマットすることができます:

date = new Intl.DateTimeFormat('en-AU').format(date); // Australian date format: "8/10/2010" 


date = new Intl.DateTimeFormat('en-US').format(date); // USA date format: "10/8/2010" 


date = new Intl.DateTimeFormat('ar-EG').format(date);  // Arabic date format: "٨‏/١٠‏/٢٠١٠"

上記の形式が正確に必要な場合は、次の操作を実行できます。

date = new Date(Date.UTC(2010, 7, 10, 0, 0, 0));
var options = {year: "numeric", month: "short", day: "numeric"};
date = new Intl.DateTimeFormat("en-AU", options).format(date).replace(/\s/g, '-');

そして、結果は次のようになります。

"10-Aug-2010"

詳細については、 IntlAPIおよびIntl.DateTimeFormatのドキュメントを参照してください。

于 2017-07-19T12:58:53.350 に答える
40

パッケージソリューション: Luxon

1つのソリューションを使用してすべてに対応したい場合は、Luxon(Moment.jsの最新バージョン)を使用することを強くお勧めします。Luxon、多くのロケール/言語やその他の多くの機能でフォーマットも行います。

LuxonはMoment.jsWebサイトでホストされ、Moment.js開発者によって開発されました。これは、Moment.jsには、開発者が対処したかったが対処できなかった制限があるためです。

インストールするには:

npm install luxonまたはyarn add luxon(他のインストール方法についてはリンクにアクセスしてください)

例:

luxon.DateTime.fromISO('2010-08-10').toFormat('yyyy-LLL-dd');

収量:

2010年8月10日

手動ソリューション

Moment.js、Class DateTimeFormatter(Java)、およびClass SimpleDateFormat(Java)formatDate(date, patternStr)と同様のフォーマットを使用して、コードを読みやすく変更しやすい包括的なソリューションを実装しました。日付、時刻、AM / PMなどを表示できます。その他の例については、コードを参照してください。

例:

formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')

formatDate以下のコードスニペットに実装されています)

収量:

2018年10月12日金曜日18:11:23:445

[コードスニペットを実行]をクリックしてコードを試してください。

日付と時刻のパターン

yy=2桁の年; yyyy=通年

M=桁の月; MM=2桁の月; MMM=短い月の名前; MMMM=完全な月の名前

EEEE=完全な平日の名前; EEE=短い平日の名前

d=桁の日; dd=2桁の日

h=午前/午後; hh=2桁の午前/午後; H=時間; HH=2桁の時間

m=分; mm=2桁の分; aaa=午前/午後

s=秒; ss=2桁の秒

S=ミリ秒

var monthNames = [
  "January", "February", "March", "April", "May", "June", "July",
  "August", "September", "October", "November", "December"
];
var dayOfWeekNames = [
  "Sunday", "Monday", "Tuesday",
  "Wednesday", "Thursday", "Friday", "Saturday"
];
function formatDate(date, patternStr){
    if (!patternStr) {
        patternStr = 'M/d/yyyy';
    }
    var day = date.getDate(),
        month = date.getMonth(),
        year = date.getFullYear(),
        hour = date.getHours(),
        minute = date.getMinutes(),
        second = date.getSeconds(),
        miliseconds = date.getMilliseconds(),
        h = hour % 12,
        hh = twoDigitPad(h),
        HH = twoDigitPad(hour),
        mm = twoDigitPad(minute),
        ss = twoDigitPad(second),
        aaa = hour < 12 ? 'AM' : 'PM',
        EEEE = dayOfWeekNames[date.getDay()],
        EEE = EEEE.substr(0, 3),
        dd = twoDigitPad(day),
        M = month + 1,
        MM = twoDigitPad(M),
        MMMM = monthNames[month],
        MMM = MMMM.substr(0, 3),
        yyyy = year + "",
        yy = yyyy.substr(2, 2)
    ;
    // checks to see if month name will be used
    patternStr = patternStr
      .replace('hh', hh).replace('h', h)
      .replace('HH', HH).replace('H', hour)
      .replace('mm', mm).replace('m', minute)
      .replace('ss', ss).replace('s', second)
      .replace('S', miliseconds)
      .replace('dd', dd).replace('d', day)
      
      .replace('EEEE', EEEE).replace('EEE', EEE)
      .replace('yyyy', yyyy)
      .replace('yy', yy)
      .replace('aaa', aaa);
    if (patternStr.indexOf('MMM') > -1) {
        patternStr = patternStr
          .replace('MMMM', MMMM)
          .replace('MMM', MMM);
    }
    else {
        patternStr = patternStr
          .replace('MM', MM)
          .replace('M', M);
    }
    return patternStr;
}
function twoDigitPad(num) {
    return num < 10 ? "0" + num : num;
}
console.log(formatDate(new Date()));
console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP's request
console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa'));
console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm'));
console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S'));
console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa'));

Luxonを育ててくれてありがとう@Gerry。

于 2018-10-13T04:19:30.547 に答える
34

ECMAScript Edition 6(ES6 / ES2015)文字列テンプレートの使用:

let d = new Date();
let formatted = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;

区切り文字を変更する必要がある場合:

const delimiter = '/';
let formatted = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join(delimiter);
于 2017-08-28T12:49:40.537 に答える
30

Dateコンストラクター(およびDate.parse())は、日付を作成するときにパラメーターとして1つの形式のみを受け入れます。これは、ISO8601です

// new Date('YYYY-MM-DDTHH:mm:ss.sssZ')
const date = new Date('2017-08-15')

ただし、ブラウザの違いと不整合のため、文字列からaを解析することは強くお勧めしません(MDNでは日付文字列を使用して日付を作成しないことをお勧めします)。

推奨される代替手段は、次のように数値データから直接Dateインスタンスを構築することです。

new Date(2017, 7, 15) // Month is zero-indexed

それが構文解析です。ここで、日付を希望の文字列にフォーマットするには、Dateオブジェクトにネイティブないくつかのオプションがあります(ただし、必要なフォーマットに準拠しているものはないと思います)。

date.toString()       // 'Wed Jan 23 2019 17:23:42 GMT+0800 (Singapore Standard Time)'
date.toDateString()   // 'Wed Jan 23 2019'
date.toLocaleString() // '23/01/2019, 17:23:42'
date.toGMTString()    // 'Wed, 23 Jan 2019 09:23:42 GMT'
date.toUTCString()    // 'Wed, 23 Jan 2019 09:23:42 GMT'
date.toISOString()    // '2019-01-23T09:23:42.079Z'

他のフォーマットオプションについては、 Moment.jsday.jsなどのライブラリを使用する必要があります。

日付の書式設定のヒントについては、この記事のZellLiewの功績によるものです。

于 2021-05-03T18:28:13.820 に答える
21

外部ライブラリを使用しないJavaScriptソリューション:

var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate() + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)
于 2014-07-21T08:49:51.563 に答える
20

これが、私が取り組んでいるプロジェクトの日付フォーマットを処理するために書いたコードです。それは私のニーズに合うようにPHPの日付フォーマット機能を模倣しています。自由に使用してください。既存のDate()オブジェクトを拡張するだけです。これは最も洗練されたソリューションではないかもしれませんが、私のニーズには合っています。

var d = new Date(); 
d_string = d.format("m/d/Y h:i:s");

/**************************************
 * Date class extension
 * 
 */
    // Provide month names
    Date.prototype.getMonthName = function(){
        var month_names = [
                            'January',
                            'February',
                            'March',
                            'April',
                            'May',
                            'June',
                            'July',
                            'August',
                            'September',
                            'October',
                            'November',
                            'December'
                        ];

        return month_names[this.getMonth()];
    }

    // Provide month abbreviation
    Date.prototype.getMonthAbbr = function(){
        var month_abbrs = [
                            'Jan',
                            'Feb',
                            'Mar',
                            'Apr',
                            'May',
                            'Jun',
                            'Jul',
                            'Aug',
                            'Sep',
                            'Oct',
                            'Nov',
                            'Dec'
                        ];

        return month_abbrs[this.getMonth()];
    }

    // Provide full day of week name
    Date.prototype.getDayFull = function(){
        var days_full = [
                            'Sunday',
                            'Monday',
                            'Tuesday',
                            'Wednesday',
                            'Thursday',
                            'Friday',
                            'Saturday'
                        ];
        return days_full[this.getDay()];
    };

    // Provide full day of week name
    Date.prototype.getDayAbbr = function(){
        var days_abbr = [
                            'Sun',
                            'Mon',
                            'Tue',
                            'Wed',
                            'Thur',
                            'Fri',
                            'Sat'
                        ];
        return days_abbr[this.getDay()];
    };

    // Provide the day of year 1-365
    Date.prototype.getDayOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((this - onejan) / 86400000);
    };

    // Provide the day suffix (st,nd,rd,th)
    Date.prototype.getDaySuffix = function() {
        var d = this.getDate();
        var sfx = ["th","st","nd","rd"];
        var val = d%100;

        return (sfx[(val-20)%10] || sfx[val] || sfx[0]);
    };

    // Provide Week of Year
    Date.prototype.getWeekOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
    } 

    // Provide if it is a leap year or not
    Date.prototype.isLeapYear = function(){
        var yr = this.getFullYear();

        if ((parseInt(yr)%4) == 0){
            if (parseInt(yr)%100 == 0){
                if (parseInt(yr)%400 != 0){
                    return false;
                }
                if (parseInt(yr)%400 == 0){
                    return true;
                }
            }
            if (parseInt(yr)%100 != 0){
                return true;
            }
        }
        if ((parseInt(yr)%4) != 0){
            return false;
        } 
    };

    // Provide Number of Days in a given month
    Date.prototype.getMonthDayCount = function() {
        var month_day_counts = [
                                    31,
                                    this.isLeapYear() ? 29 : 28,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31
                                ];

        return month_day_counts[this.getMonth()];
    } 

    // format provided date into this.format format
    Date.prototype.format = function(dateFormat){
        // break apart format string into array of characters
        dateFormat = dateFormat.split("");

        var date = this.getDate(),
            month = this.getMonth(),
            hours = this.getHours(),
            minutes = this.getMinutes(),
            seconds = this.getSeconds();
        // get all date properties ( based on PHP date object functionality )
        var date_props = {
            d: date < 10 ? '0'+date : date,
            D: this.getDayAbbr(),
            j: this.getDate(),
            l: this.getDayFull(),
            S: this.getDaySuffix(),
            w: this.getDay(),
            z: this.getDayOfYear(),
            W: this.getWeekOfYear(),
            F: this.getMonthName(),
            m: month < 10 ? '0'+(month+1) : month+1,
            M: this.getMonthAbbr(),
            n: month+1,
            t: this.getMonthDayCount(),
            L: this.isLeapYear() ? '1' : '0',
            Y: this.getFullYear(),
            y: this.getFullYear()+''.substring(2,4),
            a: hours > 12 ? 'pm' : 'am',
            A: hours > 12 ? 'PM' : 'AM',
            g: hours % 12 > 0 ? hours % 12 : 12,
            G: hours > 0 ? hours : "12",
            h: hours % 12 > 0 ? hours % 12 : 12,
            H: hours,
            i: minutes < 10 ? '0' + minutes : minutes,
            s: seconds < 10 ? '0' + seconds : seconds           
        };

        // loop through format array of characters and add matching data else add the format character (:,/, etc.)
        var date_string = "";
        for(var i=0;i<dateFormat.length;i++){
            var f = dateFormat[i];
            if(f.match(/[a-zA-Z]/g)){
                date_string += date_props[f] ? date_props[f] : '';
            } else {
                date_string += f;
            }
        }

        return date_string;
    };
/*
 *
 * END - Date class extension
 * 
 ************************************/
于 2013-05-06T20:22:43.807 に答える
20

JavaScriptでDateTimesをフォーマットするための便利で柔軟な方法は次のIntl.DateTimeFormatとおりです。

var date = new Date();
var options = { year: 'numeric', month: 'short', day: '2-digit'};
var _resultDate = new Intl.DateTimeFormat('en-GB', options).format(date);
// The _resultDate is: "12 Oct 2017"
// Replace all spaces with - and then log it.
console.log(_resultDate.replace(/ /g,'-'));

結果は次のとおりです。 "12-Oct-2017"

日付と時刻の形式は、options引数を使用してカスタマイズできます。

このIntl.DateTimeFormatオブジェクトは、言語に依存する日付と時刻のフォーマットを可能にするオブジェクトのコンストラクターです。

構文

new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])

パラメーター

ロケール

オプション。BCP 47言語タグを含む文字列、またはそのような文字列の配列。locales引数の一般的な形式と解釈につ​​いては、Intlページを参照してください。次のUnicode拡張キーが許可されています。

nu
Numbering system. Possible values include: "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
ca
Calendar. Possible values include: "buddhist", "chinese", "coptic", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".

オプション

オプション。次のプロパティの一部またはすべてを持つオブジェクト:

localeMatcher

使用するロケールマッチングアルゴリズム。"lookup"可能な値はとです"best fit"。デフォルトはです"best fit"。このオプションの詳細については、国際ページを参照してください。

timeZone

使用するタイムゾーン。実装が認識しなければならない唯一の値は"UTC";です。デフォルトは、ランタイムのデフォルトのタイムゾーンです。実装は、、、など"Asia/Shanghai"のIANAタイムゾーンデータベースのタイムゾーン名を認識する場合もあります。"Asia/Kolkata""America/New_York"

時間12

(24時間制ではなく)12時間制を使用するかどうか。true可能な値はとですfalse。デフォルトはロケールに依存します。

formatMatcher

使用するフォーマットマッチングアルゴリズム。"basic"可能な値はとです"best fit"。デフォルトはです"best fit"。このプロパティの使用については、次の段落を参照してください。

次のプロパティは、フォーマットされた出力で使用する日時コンポーネントとそれらの目的の表現を示しています。少なくとも次のサブセットをサポートするには、実装が必要です。

weekday, year, month, day, hour, minute, second
weekday, year, month, day
year, month, day
year, month
month, day
hour, minute, second
hour, minute

実装は他のサブセットをサポートする場合があり、要求は利用可能なすべてのサブセット表現の組み合わせに対してネゴシエートされ、最適なものを見つけます。このネゴシエーションには2つのアルゴリズムが使用可能であり、formatMatcherプロパティによって選択されます。完全に指定された"basic"アルゴリズムと実装に依存する「最適な」アルゴリズムです。

平日

平日の表現。可能な値は"narrow"、、、"short"です"long"

時代

時代の表現。可能な値は"narrow"、、、"short"です"long"

年の表現。可能な値は"numeric""2-digit"です。

月の表現。可能な値は、、、、、"numeric"です。"2-digit""narrow""short""long"

その日の表現。可能な値は"numeric""2-digit"です。

時間

時間の表現。可能な値は"numeric""2-digit"です。

分の表現。可能な値は"numeric""2-digit"です。

2番目

2番目の表現。可能な値は"numeric""2-digit"です。

timeZoneName

タイムゾーン名の表現。可能な値は"short""long"です。各日時コンポーネントプロパティのデフォルト値は未定義ですが、すべてのコンポーネントプロパティが未定義の場合、年、月、日はと見なされます"numeric"

オンラインで確認

詳細

于 2017-10-13T10:58:32.627 に答える
19

new Date().toLocaleDateString()

// "3/21/2018"

developer.mozilla.orgのその他のドキュメント

于 2018-01-15T02:33:26.913 に答える
16

これには多くの解決策がありますが、その中で最も優れているのはMoment.jsだと思います。したがって、私は個人的に、日付と時刻の操作にMoment.jsを使用することをお勧めします。

console.log(moment().format('DD-MMM-YYYY'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

于 2016-08-29T09:48:16.637 に答える
16

これは問題を解決する可能性があります。

var d = new Date();

var options = {   
    day: 'numeric',
    month: 'long', 
    year: 'numeric'
};

console.log(d.toLocaleDateString('en-ZA', options));

フォーマットを見つける日付

于 2018-01-08T10:27:33.713 に答える
15

コードでjQueryUIを使用している場合は、と呼ばれる組み込み関数がありますformatDate()。私は今日の日付をフォーマットするためにこのように使用しています:

var testdate = Date();
testdate = $.datepicker.formatDate( "d-M-yy",new Date(testdate));
alert(testdate);

日付のフォーマットの他の多くの例は、jQueryUIドキュメントで確認でき ます。

于 2014-11-17T13:32:55.980 に答える
14

これが私のnpmプラグインの実装方法です

var monthNames = [
  "January", "February", "March",
  "April", "May", "June", "July",
  "August", "September", "October",
  "November", "December"
];

var Days = [
  "Sunday", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday"
];

var formatDate = function(dt,format){
  format = format.replace('ss', pad(dt.getSeconds(),2));
  format = format.replace('s', dt.getSeconds());
  format = format.replace('dd', pad(dt.getDate(),2));
  format = format.replace('d', dt.getDate());
  format = format.replace('mm', pad(dt.getMinutes(),2));
  format = format.replace('m', dt.getMinutes());
  format = format.replace('MMMM', monthNames[dt.getMonth()]);
  format = format.replace('MMM', monthNames[dt.getMonth()].substring(0,3));
  format = format.replace('MM', pad(dt.getMonth()+1,2));
  format = format.replace(/M(?![ao])/, dt.getMonth()+1);
  format = format.replace('DD', Days[dt.getDay()]);
  format = format.replace(/D(?!e)/, Days[dt.getDay()].substring(0,3));
  format = format.replace('yyyy', dt.getFullYear());
  format = format.replace('YYYY', dt.getFullYear());
  format = format.replace('yy', (dt.getFullYear()+"").substring(2));
  format = format.replace('YY', (dt.getFullYear()+"").substring(2));
  format = format.replace('HH', pad(dt.getHours(),2));
  format = format.replace('H', dt.getHours());
  return format;
}

pad = function(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
于 2016-07-30T16:58:28.047 に答える
14

DayJsをご覧ください。これはmomentJs のリメイクですが、モジュラーアーキテクチャーは非常に軽量です。

同じ最新のAPIを使用したMoment.jsの高速2kB代替

Day.jsは、Moment.jsとほぼ互換性のあるAPIを備えた最新のブラウザーの日付と時刻を解析、検証、操作、および表示する最小限のJavaScriptライブラリです。Moment.jsを使用している場合は、Day.jsの使用方法をすでに知っています。

var date = Date.now();
const formatedDate = dayjs(date).format("YYYY-MM-DD")
console.log(formatedDate);
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.8.16/dayjs.min.js" crossorigin="anonymous"></script>

于 2019-11-01T13:43:44.497 に答える
11
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();
于 2016-02-09T22:00:55.257 に答える
11

JD Smithのすばらしい正規表現ソリューションに触発されて、私は突然、この頭を分割するアイデアを思いつきました。

var D = Date().toString().split(" ");
console.log(D[2] + "-" + D[1] + "-" + D[3]);

于 2016-08-23T13:59:35.210 に答える
10

コピー、貼り付け、採用するための本当にシンプルなES6ソリューションをお探しの方は、次のようにしてください。

const dateToString = d => `${d.getFullYear()}-${('00' + (d.getMonth() + 1)).slice(-2)}-${('00' + d.getDate()).slice(-2)}` 

// how to use:
const myDate = new Date(Date.parse('04 Dec 1995 00:12:00 GMT'))
console.log(dateToString(myDate)) // 1995-12-04

于 2018-05-07T15:00:53.660 に答える
10

2019年の時点で、toLocaleDateStringを取得して特定の部分のみを返し、必要に応じてそれらに参加できるようです。

var date = new Date();

console.log(date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + "-"+ date.toLocaleDateString("en-US", { month: 'short' })
            + "-" + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> 16-Nov-2019

console.log(date.toLocaleDateString("en-US", { month: 'long' }) 
            + " " + date.toLocaleDateString("en-US", { day: 'numeric' }) 
            + ", " + date.toLocaleDateString("en-US", { year: 'numeric' }) );

> November 16, 2019
于 2019-11-17T03:52:09.730 に答える
9

日付をたとえばのようにフォーマットするには、ES6配列の破棄10-Aug-2010を使用することをお勧めします。.toDateString()

const formattedDate = new Date().toDateString()
// The above yields e.g. 'Mon Jan 06 2020'

const [, month, day, year] = formattedDate.split(' ')

const ddMmmYyyy = `${day}-${month}-${year}`
// or
const ddMmmYyyy = [day, month, year].join('-')
于 2019-11-22T16:14:04.357 に答える
8

Sugar.jsには、 Date.formatメソッドなど、Dateオブジェクトに対する優れた拡張機能があります。

ドキュメントからの例:

Date.create().format('{Weekday} {Month} {dd}, {yyyy}');

Date.create().format('{12hr}:{mm}{tt}')
于 2012-10-22T22:10:50.450 に答える
8

Internet Explorer 11 、Firefox、Chromeでも同じように機能します(Chrome 80.xは、en-UKを選択すると12時間形式で表示されます)。

const d = new Date('2010/08/05 23:45') // 26.3.2020
const dtfUK = new Intl.DateTimeFormat('UK', { year: 'numeric', month: '2-digit', day: '2-digit',
        hour: '2-digit',minute: '2-digit', second: '2-digit' }); //
const dtfUS = new Intl.DateTimeFormat('en', { year: 'numeric', month: '2-digit', day: '2-digit',
        hour: '2-digit',minute: '2-digit', second: '2-digit' }); //
console.log(dtfUS.format(d)); // 08/05/2010 11:45:00 PM
console.log(dtfUK.format(d)); // 05.08.2010 23:45:00
/* node.js:
08/05/2010, 11:45:00 PM
2010-08-05 23:45:00
*/

もっと一般的なことはどうですか?

var d = new Date('2010-08-10T10:34:56.789Z');
var str = d.toDateString() + // Tue Aug 10 2010
    ' ' + d.toTimeString().split(' ')[0] + // 12:34:56, GMT+0x00 (GMT+0x:00)
    ' ' + (d.getMonth() + 101) + // 108
    ' ' + d.getMilliseconds(); // 789
console.log(str); // Tue Aug 10 2010 12:34:56 108 789
console.log(//   $1 Tue  $2 Aug  $3 11     $4 2020 $5 12   $6 34   $7 56    $8 108  $9 789
    str.replace(/(\S{3}) (\S{3}) (\d{1,2}) (\d{4}) (\d{2}):(\d{2}):(\d{2}) 1(\d{2}) (\d{1,3})/, '$3-$2-$4 $5:$6.$9 ($1)')
); // 10-Aug-2010 12:34.789 (Tue)
/*
$1: Tue  Week Day string
$2: Aug  Month short text
$3: 11   Day
$4: 2010 Year
$5: 12   Hour
$6: 34   Minute
$7: 56   Seconds
$8: 08   Month
$9: 789  Milliseconds
*/

または、たとえば1行のIIFE 「ライブラリ」 ;-)

console.log(
    (function (frm, d) { return [d.toDateString(), d.toTimeString().split(' ')[0], (d.getMonth() + 101), d.getMilliseconds()].join(' ').replace(/(\S{3}) (\S{3}) (\d{1,2}) (\d{4}) (\d{2}):(\d{2}):(\d{2}) 1(\d{2}) (\d{1,3})/, frm); })
    ('$4/$8/$3 $5:$6 ($1)', new Date())
);

不要な部分を削除したり、不要な場合はインデックスを変更したりできます。

于 2020-03-27T07:34:57.867 に答える
7

「2010年8月10日」を入手するには、次のことを試してください。

var date = new Date('2010-08-10 00:00:00');
date = date.toLocaleDateString(undefined, {day:'2-digit'}) + '-' + date.toLocaleDateString(undefined, {month:'short'}) + '-' + date.toLocaleDateString(undefined, {year:'numeric'})

ブラウザのサポートについては、toLocaleDateStringを参照してください。

于 2019-02-05T19:39:35.847 に答える
7

2つの純粋なJavaScriptワンライナー

この回答では、JDスミスのアイデアを発展させます。JDSmithregexpを短縮することができました。

let format= d=> d.toString().replace(/\w+ (\w+) (\d+) (\d+).*/,'$2-$1-$3');

console.log( format(Date()) );

Dave'sもJDSmithのアイデアに基づいていますが、彼は正規表現を避け、非常に優れたソリューションを提供します。私は彼のソリューションを少し短くし(splitパラメーターを変更して)、ラッパーで不透明にします。

let format= (d,a=d.toString().split` `)=> a[2]+"-"+a[1]+"-"+a[3];

console.log( format(Date()) );

于 2020-03-03T12:29:36.683 に答える
6

これを試して:

function init(){
    var d = new Date();
    var day = d.getDate();
    var x = d.toDateString().substr(4, 3);
    var year = d.getFullYear();
    document.querySelector("#mydate").innerHTML = day + '-' + x + '-' + year;
}
window.onload = init;
<div id="mydate"></div>

于 2015-12-31T10:01:09.243 に答える
5

DateFormatter.formatDate(new Date(2010,7,10), 'DD-MMM-YYYY')

=>10-Aug-2010

DateFormatter.formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss')

=>2017-11-22 19:52:37

DateFormatter.formatDate(new Date(2005, 1, 2, 3, 4, 5), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A')

=>2 02 Wed Wednesday, 2 02 Feb February, 05 2005, 3 03 3 03, 4 04, 5 05, am AM

var DateFormatter = {
  monthNames: [
    "January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"
  ],
  dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  formatDate: function (date, format) {
    var self = this;
    format = self.getProperDigits(format, /d+/gi, date.getDate());
    format = self.getProperDigits(format, /M+/g, date.getMonth() + 1);
    format = format.replace(/y+/gi, function (y) {
      var len = y.length;
      var year = date.getFullYear();
      if (len == 2)
        return (year + "").slice(-2);
      else if (len == 4)
        return year;
      return y;
    })
    format = self.getProperDigits(format, /H+/g, date.getHours());
    format = self.getProperDigits(format, /h+/g, self.getHours12(date.getHours()));
    format = self.getProperDigits(format, /m+/g, date.getMinutes());
    format = self.getProperDigits(format, /s+/gi, date.getSeconds());
    format = format.replace(/a/ig, function (a) {
      var amPm = self.getAmPm(date.getHours())
      if (a === 'A')
        return amPm.toUpperCase();
      return amPm;
    })
    format = self.getFullOr3Letters(format, /d+/gi, self.dayNames, date.getDay())
    format = self.getFullOr3Letters(format, /M+/g, self.monthNames, date.getMonth())
    return format;
  },
  getProperDigits: function (format, regex, value) {
    return format.replace(regex, function (m) {
      var length = m.length;
      if (length == 1)
        return value;
      else if (length == 2)
        return ('0' + value).slice(-2);
      return m;
    })
  },
  getHours12: function (hours) {
    // https://stackoverflow.com/questions/10556879/changing-the-1-24-hour-to-1-12-hour-for-the-gethours-method
    return (hours + 24) % 12 || 12;
  },
  getAmPm: function (hours) {
    // https://stackoverflow.com/questions/8888491/how-do-you-display-javascript-datetime-in-12-hour-am-pm-format
    return hours >= 12 ? 'pm' : 'am';
  },
  getFullOr3Letters: function (format, regex, nameArray, value) {
    return format.replace(regex, function (s) {
      var len = s.length;
      if (len == 3)
        return nameArray[value].substr(0, 3);
      else if (len == 4)
        return nameArray[value];
      return s;
    })
  }
}

console.log(DateFormatter.formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss'));
console.log(DateFormatter.formatDate(new Date(), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A'));
console.log(DateFormatter.formatDate(new Date(2005, 1, 2, 3, 4, 5), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A'));

フォーマットの説明はIonicFrameworkZから取得されました( UTCタイムゾーンオフセットはサポートされていません)

徹底的にテストされていません

于 2017-11-22T14:24:31.383 に答える
4

人間が読める形式の短い機能が必要な場合は、これを簡単に調整できます。

timeStampパラメータは1970年からのミリ秒です-それは他の多くのデバイスによって返されますnew Date().getTime()...

OK、気が変わった。ゼロパディング用の追加機能を含めました。呪い!

 function zeroPad(aNumber) {
     return ("0"+aNumber).slice(-2);
 }
 function humanTime(timeStamp) {
    var M = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var D = new Date(timeStamp); // 23 Aug 2016 16:45:59 <-- Desired format.
    return D.getDate() + " " + M[D.getMonth()] + " " + D.getFullYear() + " " + D.getHours() + ":" + zeroPad(d.getMinutes()) + ":" + zeroPad(D.getSeconds());
 }
于 2016-08-23T12:57:48.967 に答える
3

私は以下を使用します。シンプルで問題なく動作します。

 var dtFormat = require('dtformat');
   var today = new Date();
   dtFormat(today, "dddd, mmmm dS, yyyy, h:MM:ss TT");

またはこれ:

var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate()  + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)
于 2015-11-11T08:46:59.093 に答える
3

短く、広く互換性のあるアプローチ:

function formatDate(date) {
    date.toISOString()
    .replace(/^(\d+)-(\d+)-(\d+).*$/, // Only extract Y-M-D
        function (a,y,m,d) {
            return [
                d, // Day
                ['Jan','Feb','Mar','Apr','May','Jun',  // Month Names
                'Jul','Ago','Sep','Oct','Nov','Dec']
                [m-1], // Month
                y  // Year
            ].join('-') // Stitch together
        })
}

または、1行として:

date.toISOString().replace(/^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+).(\d+)Z$/, function (a,y,m,d) {return [d,['Jan','Feb','Mar','Apr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic'][m-1],y].join('-')})
于 2015-12-21T16:34:53.627 に答える
2

jQueryUIプラグインをページに追加します。

function DateFormate(dateFormate, datetime) {
    return $.datepicker.formatDate(dateFormate, datetime);
};
于 2012-06-29T12:02:54.703 に答える
2

プロジェクトですでにExtJSを使用している場合は、 Ext.Dateを使用できます。

var date = new Date();
Ext.Date.format(date, "d-M-Y");

戻り値:

"11-Nov-2015"
于 2015-11-11T08:31:57.103 に答える
2

JavaScript番号、日付、JSON日付(MicrosoftまたはISO8601)のローカライズされたフォーマット用の新しいライブラリsmarti.to.jsがあります。

例:

new Date('2015-1-1').to('dd.MM.yy')         // Outputs 01.01.2015
"2015-01-01T10:11:12.123Z".to('dd.MM.yy')   // Outputs 01.01.2015

ローカリゼーションファイル(smarti.to。{culture} .js)で定義されたカスタムの短いパターンもあります。例(smarti.to.et-EE.js):

new Date('2015-1-1').to('d')                // Outputs 1.01.2015

そしてマルチフォーマット能力:

smarti.format('{0:n2} + {1:n2} = {2:n2}', 1, 2, 3)   // Output: 1,00 + 2,00 = 3,00
于 2015-11-18T08:36:58.703 に答える
2

これは、3文字の月と2桁の年を持つように変更された主な回答です。

function formatDate(date) {
    var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    var day = date.getDate(), monthIndex = date.getMonth(), year = date.getFullYear().toString().substr(-2);
    return day + ' ' + monthNames[monthIndex] + ' ' + year;
}

document.write(formatDate(new Date()));

于 2018-01-17T20:08:52.950 に答える
2

日付をフォーマットする他の方法:

function formatDate(dDate,sMode){
    var today = dDate;
    var dd = today.getDate();
    var mm = today.getMonth()+1; //January is 0!
    var yyyy = today.getFullYear();
    if(dd<10) {
        dd = '0'+dd
    }
    if(mm<10) {
        mm = '0'+mm
    }
    if (sMode+""==""){
        sMode = "dd/mm/yyyy";
    }
    if (sMode == "yyyy-mm-dd"){
        return  yyyy + "-" + mm + "-" + dd + "";
    }
    if (sMode == "dd/mm/yyyy"){
        return  dd + "/" + mm + "/" + yyyy;
    }
}
于 2018-08-30T20:04:34.447 に答える
2

yy=2桁の年; yyyy=通年

M=桁の月; MM=2桁の月; MMM=短い月の名前; MMMM=完全な月の名前

EEEE=完全な平日の名前; EEE=短い平日の名前

d=桁の日; dd=2桁の日

h=時間; hh=2桁の時間

m=分; mm=2桁の分

s=秒; ss=2桁の秒

S=ミリ秒

クラスSimpleDateFormat(Java)と同様のフォーマットを使用

var monthNames = [
  "January", "February", "March", "April", "May", "June", "July",
  "August", "September", "October", "November", "December"
];
var dayOfWeekNames = [
  "Sunday", "Monday", "Tuesday",
  "Wednesday", "Thursday", "Friday", "Saturday"
];
function formatDate(date, formatStr){
    if (!formatStr) {
      formatStr = 'dd/mm/yyyy';
    }
    var day = date.getDate(),
        month = date.getMonth(),
        year = date.getFullYear(),
        hour = date.getHours(),
        minute = date.getMinutes(),
        second = date.getSeconds(),
        miliseconds = date.getMilliseconds(),
        hh = twoDigitPad(hour),
        mm = twoDigitPad(minute),
        ss = twoDigitPad(second),
        EEEE = dayOfWeekNames[date.getDay()],
        EEE = EEEE.substr(0, 3),
        dd = twoDigitPad(day),
        M = month + 1,
        MM = twoDigitPad(M),
        MMMM = monthNames[month],
        MMM = MMMM.substr(0, 3),
        yyyy = year + "",
        yy = yyyy.substr(2, 2)
    ;
    return formatStr
      .replace('hh', hh).replace('h', hour)
      .replace('mm', mm).replace('m', minute)
      .replace('ss', ss).replace('s', second)
      .replace('S', miliseconds)
      .replace('dd', dd).replace('d', day)
      .replace('MMMM', MMMM).replace('MMM', MMM).replace('MM', MM).replace('M', M)
      .replace('EEEE', EEEE).replace('EEE', EEE)
      .replace('yyyy', yyyy)
      .replace('yy', yy)
    ;
}
function twoDigitPad(num) {
    return num < 10 ? "0" + num : num;
}
console.log(formatDate(new Date()));
console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy hh:mm:ss:S'));
console.log(formatDate(new Date(), 'EEE, MMM d, yyyy hh:mm'));
console.log(formatDate(new Date(), 'yyyy-MM-dd hh:mm:ss:S'));
console.log(formatDate(new Date(), 'yy-MM-dd hh:mm'));

于 2018-10-13T03:56:49.480 に答える
2

この関数は、JavaのSimpleDateFormatに触発され、次のようなさまざまな形式を提供します。

dd-MMM-yyyy → 17-Jul-2018
yyyyMMdd'T'HHmmssXX → 20180717T120856+0900
yyyy-MM-dd'T'HH:mm:ssXXX → 2018-07-17T12:08:56+09:00
E, dd MMM yyyy HH:mm:ss Z → Tue, 17 Jul 2018 12:08:56 +0900
yyyy.MM.dd 'at' hh:mm:ss Z → 2018.07.17 at 12:08:56 +0900
EEE, MMM d, ''yy → Tue, Jul 17, '18
h:mm a → 12:08 PM
hh 'o''''clock' a, X → 12 o'clock PM, +09

コード例:

function formatWith(formatStr, date, opts) {

    if (!date) {
        date = new Date();
    }

    opts = opts || {};

    let _days = opts.days;

    if (!_days) {
        _days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
    }

    let _months = opts.months;

    if (!_months) {
        _months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    }

    const pad = (number, strDigits, isUnpad) => {
        const strNum = number.toString();
        if (!isUnpad && strNum.length > strDigits.length) {
            return strNum;
        } else {
            return ('0000' + strNum).slice(-strDigits.length);
        }
    };

    const timezone = (date, letter) => {
        const chunk = [];
        const offset = -date.getTimezoneOffset();
        chunk.push(offset === 0 ? 'Z' : offset > 0 ? '+' : '-');//add Z or +,-
        if (offset === 0) return chunk;
        chunk.push(pad(Math.floor(offset / 60), '00'));//hour
        if (letter === 'X') return chunk.join('');
        if (letter === 'XXX') chunk.push(':');
        chunk.push(pad((offset % 60), '00'));//min
        return chunk.join('');
    };

    const ESCAPE_DELIM = '\0';
    const escapeStack = [];

    const escapedFmtStr = formatStr.replace(/'.*?'/g, m => {
        escapeStack.push(m.replace(/'/g, ''));
        return ESCAPE_DELIM + (escapeStack.length - 1) + ESCAPE_DELIM;
    });

    const formattedStr = escapedFmtStr
        .replace(/y{4}|y{2}/g, m => pad(date.getFullYear(), m, true))
        .replace(/M{3}/g, m => _months[date.getMonth()])
        .replace(/M{1,2}/g, m => pad(date.getMonth() + 1, m))
        .replace(/M{1,2}/g, m => pad(date.getMonth() + 1, m))
        .replace(/d{1,2}/g, m => pad(date.getDate(), m))
        .replace(/H{1,2}/g, m => pad(date.getHours(), m))
        .replace(/h{1,2}/g, m => {
            const hours = date.getHours();
            return pad(hours === 0 ? 12 : hours > 12 ? hours - 12 : hours, m);
        })
        .replace(/a{1,2}/g, m => date.getHours() >= 12 ? 'PM' : 'AM')
        .replace(/m{1,2}/g, m => pad(date.getMinutes(), m))
        .replace(/s{1,2}/g, m => pad(date.getSeconds(), m))
        .replace(/S{3}/g, m => pad(date.getMilliseconds(), m))
        .replace(/[E]+/g, m => _days[date.getDay()])
        .replace(/[Z]+/g, m => timezone(date, m))
        .replace(/X{1,3}/g, m => timezone(date, m))
    ;

    const unescapedStr = formattedStr.replace(/\0\d+\0/g, m => {
        const unescaped = escapeStack.shift();
        return unescaped.length > 0 ? unescaped : '\'';
    });

    return unescapedStr;
}

// Let's format with above function
const dateStr = '2018/07/17 12:08:56';
const date = new Date(dateStr);
const patterns = [
    "dd-MMM-yyyy",
    "yyyyMMdd'T'HHmmssXX",//ISO8601
    "yyyy-MM-dd'T'HH:mm:ssXXX",//ISO8601EX
    "E, dd MMM yyyy HH:mm:ss Z",//RFC1123(RFC822) like email
    "yyyy.MM.dd 'at' hh:mm:ss Z",//hh shows 1-12
    "EEE, MMM d, ''yy",
    "h:mm a",
    "hh 'o''''clock' a, X",
];

for (let pattern of patterns) {
    console.log(`${pattern} → ${formatWith(pattern, date)}`);
}

そして、これをライブラリとして使用できます

NPMモジュールとしてもリリースされています。これはNode.jsで使用することも、ブラウザのCDNから使用することもできます。

Node.js

const {SimpleDateFormat} = require('@riversun/simple-date-format');

ブラウザで

<script src="https://cdn.jsdelivr.net/npm/@riversun/simple-date-format@1.0.2/dist/simple-date-format.js"></script>

次のようにコードを記述します。

const date = new Date('2018/07/17 12:08:56');
const sdf = new SimpleDateFormat();
console.log(sdf.formatWith("yyyy-MM-dd'T'HH:mm:ssXXX", date));//to be "2018-07-17T12:08:56+09:00"

ここGitHubのソースコード

https://github.com/riversun/simple-date-format

于 2020-02-17T15:23:22.030 に答える
2

この手順を使用します

const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']

const date = new Date()

const dateString = `${date.getDate()}-${MONTHS[date.getMonth()]}-${date.getFullYear()}`

console.log(dateString)

于 2021-06-10T12:26:11.327 に答える
1

次のコードを使用すると、日付をDD-MM-YYYY(27-12-2017)またはDD MMM YYYY(27 Dec 2017)のいずれかにフォーマットできます。

/** Pad number to fit into nearest power of 10 */
function padNumber(number, prependChar, count) {
  var out = '' + number; var i;
  if (number < Math.pow(10, count))
    while (out.length < ('' + Math.pow(10, count)).length) out = prependChar + out;
  
  return out;
}

/* Format the date to 'DD-MM-YYYY' or 'DD MMM YYYY' */
function dateToDMY(date, useNumbersOnly) {
  var months = [
    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 
    'Nov', 'Dec'
  ];

  return '' + padNumber(date.getDate(), '0', 1) + 
   (useNumbersOnly? '-' + padNumber(date.getMonth() + 1, '0', 1) + '-' : ' ' + months[date.getMonth()] + ' ')
    + date.getFullYear();
}

との順序を変更しdate.getFullYear()て関数padNumber(date.getDate(), '0', 1)を作成しdateToYMD()ます。

詳細については、 repl.itの例を参照してください。

于 2017-10-27T08:43:39.577 に答える
1

これはばかげた解決策だと誰かが言うかもしれませんが、日付文字列から不要な情報を削除することでうまくいきます。

yourDateObject生成:

2017年12月13日水曜日20:40:40GMT+ 0200(EET)

yourDateObject.toString().slice(0, 15);生成:

2017年12月13日水曜日

于 2017-12-16T18:27:28.610 に答える
1

ライブラリは必要ありません。日付コンポーネントを抽出して文字列を作成するだけです。YYYY-MM-DDフォーマットを取得する方法は次のとおりです。また、月のインデックス「1月は0、2月は1など」にも注意してください。

// @flow

type Components = {
  day: number,
  month: number,
  year: number
}

export default class DateFormatter {
  // YYYY-MM-DD
  static YYYY_MM_DD = (date: Date): string => {
    const components = DateFormatter.format(DateFormatter.components(date))
    return `${components.year}-${components.month}-${components.day}`
  }

  static format = (components: Components) => {
    return {
      day: `${components.day}`.padStart(2, '0'),
      month: `${components.month}`.padStart(2, '0'),
      year: components.year
    }
  }

  static components = (date: Date) => {
    return {
      day: date.getDate(),
      month: date.getMonth() + 1,
      year: date.getFullYear()
    }
  }
}
于 2018-11-06T11:54:59.980 に答える
1

日付、日付+時刻、または時刻のみを返すことができる単純な関数:

var myDate = dateFormatter("2019-01-24 11:33:24", "date-time");
// >> RETURNS "January 24, 2019 11:33:24"

var myDate2 = dateFormatter("2019-01-24 11:33:24", "date");
// >> RETURNS "January 24, 2019"

var myDate3 = dateFormatter("2019-01-24 11:33:24", "time");
// >> RETURNS "11:33:24"


function dateFormatter(strDate, format){
    var theDate = new Date(strDate);
    if (format=="time")
       return getTimeFromDate(theDate);
    else{
       var dateOptions = {year:'numeric', month:'long', day:'numeric'};
       var formattedDate = theDate.toLocaleDateString("en-US", + dateOptions);
       if (format=="date")
           return formattedDate;
       return formattedDate + " " + getTimeFromDate(theDate);
    }
}

function getTimeFromDate(theDate){
    var sec = theDate.getSeconds();
    if (sec<10)
        sec = "0" + sec;
    var min = theDate.getMinutes();
    if (min<10)
        min = "0" + min;
    return theDate.getHours() + ':'+ min + ':' + sec;
}

于 2019-01-24T15:43:42.253 に答える
1

このモジュールは、ほとんどすべてのケースを簡単に処理できます。これは、さまざまな機能を含むLocutusによるより大きなnpmパッケージの一部ですが、パッケージ自体とは完全に独立して使用できます。npmで動作しない場合は、コピーして貼り付け/少し調整するだけです(モジュールから機能)。

2番目のパラメーターとして、Date.getTime()などのどこからでも取得できるタイムスタンプを受け入れます。

また、Locutusは、より大きなdatetimeモジュールを維持します。これも、locutusパッケージ内にあり、よりオブジェクト指向の使用方法を提供します。

ここでは、モジュールとして、非常に便利であることが証明された他の日時関数を見ることができます。

パラメータとフォーマット文字列に関するドキュメントはここにあります(ドキュメントサイトはPHPサイトですが、locutusの実装はまったく同じ仕様に従っていることに注意してください)。

日付モジュールの例

date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400)//'07:09:40 m is month'

date('F j, Y, g:i a', 1062462400)//'September 2, 2003, 12:26 am'

date('Y W o', 1062462400)//'2003 36 2003'

var $x = date('Y m d', (new Date()).getTime() / 1000) $x = $x + '' var $result = $x.length // 2009 01 09    10

date('W', 1104534000)    //'52'

date('B t', 1104534000)    //'999 31'

date('W U', 1293750000.82); // 2010-12-31    '52 1293750000'

date('W', 1293836400); // 2011-01-01    '52'

date('W Y-m-d', 1293974054); // 2011-01-02    '52 2011-01-02'
于 2019-04-20T06:29:48.003 に答える
1

たぶん、これは、喜んでまたは予期せずに、次々に複数の日付形式を探している人を助けるでしょう。コードを見つけてください:私は現在の日付でMoment.js形式の関数を使用しています(今日は29-06-2020):var startDate = moment(new Date()).format('MM/DD/YY');結果:06/28/20

年の部分のみを保持します:20を「06/28/20」として保持します。ステートメントを実行するnew Date(startDate)と、結果は「Mon Jun 28 1920 00:00:00 GMT + 0530(インド標準時)」になります。

次に、「06/28/20」で別の形式を使用すると、次のようになります。startDate = moment(startDate).format('MM-DD-YYYY'); 結果:06-28-1920、Google ChromeおよびFirefoxブラウザーでは、2回目の試行で正しい日付が06-28-2020として表示されます。

しかし、InternetExplorerでは問題が発生しています。このことから、指定された日付に1つの日付形式を適用できることがわかりました。2番目の日付形式が必要な場合は、最初の日付形式の結果ではなく、新しい日付に適用する必要があります。また、「MM-DD-YYYY」を初めて適用し、次の「MM-DD-YY」がInternetExplorerで機能していることも確認してください。明確に理解するために、リンクで私の質問を見つけてください: InternetExplorer11でMoment.jsの日付形式を使用すると日付が間違っていました。

于 2020-06-28T18:53:39.953 に答える
1

function convert_month(i = 0, option = "num") { // i = index

  var object_months = [
    { num: 01, short: "Jan", long: "January" },
    { num: 02, short: "Feb", long: "Februari" }, 
    { num: 03, short: "Mar", long: "March" },          
    { num: 04, short: "Apr", long: "April" },
    { num: 05, short: "May", long: "May" },
    { num: 06, short: "Jun", long: "Juni" },
    { num: 07, short: "Jul", long: "July" },
    { num: 08, short: "Aug", long: "August" },
    { num: 09, short: "Sep", long: "September" },
    { num: 10, short: "Oct", long: "October" },
    { num: 11, short: "Nov", long: "November" },
    { num: 12, short: "Dec", long: "December" }
  ];
        
  return object_months[i][option];

}
      
var d = new Date();
      
// https://stackoverflow.com/questions/1408289/how-can-i-do-string-interpolation-in-javascript
var num   = `${d.getDate()}-${convert_month(d.getMonth())}-${d.getFullYear()}`;
var short = `${d.getDate()}-${convert_month(d.getMonth(), "short")}-${d.getFullYear()}`;
var long  = `${d.getDate()}-${convert_month(d.getMonth(), "long")}-${d.getFullYear()}`;

document.querySelector("#num").innerHTML = num;
document.querySelector("#short").innerHTML = short;
document.querySelector("#long").innerHTML = long;
<p>Numeric  : <span id="num"></span> (default)</p>
<p>Short    : <span id="short"></span></p>
<p>Long     : <span id="long"></span></p>

于 2020-10-13T14:11:43.877 に答える
0

これがあなたが望むことを正確に行うスクリプトです

https://github.com/UziTech/js-date-format

var d = new Date("2010-8-10");
document.write(d.format("DD-MMM-YYYY"));
于 2014-07-15T15:06:30.847 に答える
0

使用する:

thisDate = new Date(parseInt(jsonDateString.replace('/Date(', '')));
formattedDate = (thisDate.getMonth() + 1) + "/" + (thisDate.getDate()+1) + "/" + thisDate.getFullYear();

これはJSONの日付"/Date(1429573751663)/"を取り、フォーマットされた文字列として生成されます。

「2015年4月21日」

于 2015-04-21T21:34:04.590 に答える
0

2.39KB縮小。1つのファイル。https://github.com/rhroyston/clock-js2010年

8月10日は次のようになります。

var str = clock.month
str.charAt(0).toUpperCase() + str.slice(1,3); //gets you "Aug"
console.log(clock.day + '-' + str + '-' + clock.year); //gets you 10-Aug-2010



于 2016-05-03T22:31:17.370 に答える
0

これは、外部モジュール/ライブラリに依存しない、またはjQueryやES7などを使用しない、すぐに貼り付けることができる時刻/日付のフォーマットコードです。他のいくつかの回答のコードとは異なり、このコードは次の機能の組み合わせを提供します。

  • JavaScriptのDateオブジェクトを入力として受け取ります
  • 日付をローカルタイムゾーンまたはUTCとして表示できます
  • 常にドキュメントに戻る必要がある通常の「%D%m%-」とは異なり、コードを記述した後でも読みやすく理解しやすいシンプルなフォーマットシステム「{year4}{month02}{second}」を使用しています。
  • フォーマットシステムには、一部のアドホックな「DDMMYYYY」システムのような奇妙な自己衝突はありません。
  • ここでテストを実行して試すことができます

// format_date(date, pattern, utc)
// - date
//   - a JavaScript Date object
//   - use "new Date()" for current time
// - pattern
//   - a string with embedded {codes} like
//     "{year4}-{month02}-{day02}: {dayname3}"
//     see format_date_funcs below for complete list
//   - any other letters go through unchanged
// - utc
//   - if true, shows date in UTC time "zone"
//   - if false/omitted, shows date in local time zone
//
var month_names =
[
  "January", "February", "March", "April", "May", "June", "July",
  "August", "September", "October", "November", "December"
];
var day_of_week_names =
[
  "Sunday", "Monday", "Tuesday",
  "Wednesday", "Thursday", "Friday", "Saturday"
];

function space_pad2(num)
{
    return num < 10 ? " " + num : num;
}

function zero_pad2(num)
{
    return num < 10 ? "0" + num : num;
}

function space_pad3(num)
{
    if (num < 10)
        return "  " + num;
    else if (num < 100)
        return " " + num;
    else
        return num;
}

function zero_pad3(num)
{
    if (num < 10)
        return "00" + num;
    else if (num < 100)
        return "0" + num;
    else
        return num;
}

var format_date_funcs =
{
    // {year4}  = '1902'
    // {year02} =   '02'
    //
    'year4': function(date, utc)
    {
        var year = utc ? date.getUTCFullYear() : date.getFullYear();
        return year;
    },
    'year02': function(date, utc)
    {
        var year = utc ? date.getUTCFullYear() : date.getFullYear();
        return year.toString().substr(2,2);
    },
    // {month}   =  '1' - '12'
    // {month2}  = ' 1' - '12' (space padded)
    // {month02} = '01' - '12'
    //
    'month': function(date, utc)
    {
        var month = utc ? date.getUTCMonth() : date.getMonth(); // [0,11]
        return            month + 1;
    },
    'month2': function(date, utc)
    {
        var month = utc ? date.getUTCMonth() : date.getMonth(); // [0,11]
        return space_pad2(month + 1);
    },
    'month02': function(date, utc)
    {
        var month = utc ? date.getUTCMonth() : date.getMonth(); // [0,11]
        return zero_pad2(month + 1);
    },
    // {monthname}  = 'January'
    // {monthname3} = 'Jan'
    //
    'monthname': function(date, utc)
    {
        var month = utc ? date.getUTCMonth() : date.getMonth(); // [0,11]
        return month_names[month];
    },
    'monthname3': function(date, utc)
    {
        var month = utc ? date.getUTCMonth() : date.getMonth(); // [0,11]
        return month_names[month].substr(0, 3);
    },
    // {day}   =  '1' - '31'
    // {day2}  = ' 1' - '31' (space padded)
    // {day02} = '01' - '31'
    //
    'day': function(date, utc)
    {
        var date = utc ? date.getUTCDate() : date.getDate(); // [1,31]
        return date;
    },
    'day2': function(date, utc)
    {
        var date = utc ? date.getUTCDate() : date.getDate(); // [1,31]
        return space_pad2(date);
    },
    'day02': function(date, utc)
    {
        var date = utc ? date.getUTCDate() : date.getDate(); // [1,31]
        return zero_pad2(date);
    },
    // {dayname}  = 'Tuesday'
    // {dayname3} = 'Tue'
    //
    'dayname': function(date, utc)
    {
        var day = utc ? date.getUTCDay() : date.getDay(); // [0,6]
        return day_of_week_names[day];
    },
    'dayname3': function(date, utc)
    {
        var day = utc ? date.getUTCDay() : date.getDay(); // [0,6]
        return day_of_week_names[day].substr(0,3);
    },
    // {24hour}   =  '0' - '23'
    // {24hour2}  = ' 0' - '23' (space padded)
    // {24hour02} = '00' - '23'
    //
    '24hour': function(date, utc)
    {
        var hour = utc ? date.getUTCHours() : date.getHours(); // [0,23]
        return hour;
    },
    '24hour2': function(date, utc)
    {
        var hour = utc ? date.getUTCHours() : date.getHours(); // [0,23]
        return space_pad2(hour);
    },
    '24hour02': function(date, utc)
    {
        var hour = utc ? date.getUTCHours() : date.getHours(); // [0,23]
        return zero_pad2(hour);
    },
    // {12hour}   =  '1' - '12'
    // {12hour2}  = ' 1' - '12' (space padded)
    // {12hour02} = '01' - '12'
    // {ampm}     = 'am' or 'pm'
    // {AMPM}     = 'AM' or 'PM'
    //
    '12hour': function(date, utc)
    {
        var hour = utc ? date.getUTCHours() : date.getHours(); // [0,23]
        hour = hour % 12; // [0,11]
        if (0 === hour) hour = 12;
        return hour;
    },
    '12hour2': function(date, utc)
    {
        var hour = utc ? date.getUTCHours() : date.getHours(); // [0,23]
        hour = hour % 12; // [0,11]
        if (0 === hour) hour = 12;
        return space_pad2(hour);
    },
    '12hour02': function(date, utc)
    {
        var hour = utc ? date.getUTCHours() : date.getHours(); // [0,23]
        hour = hour % 12; // [0,11]
        if (0 === hour) hour = 12;
        return zero_pad2(hour);
    },
    'ampm': function(date, utc)
    {
        var hour = utc ? date.getUTCHours() : date.getHours(); // [0,23]
        return (hour < 12 ? 'am' : 'pm');
    },
    'AMPM': function(date, utc)
    {
        var hour = utc ? date.getUTCHours() : date.getHours(); // [0,23]
        return (hour < 12 ? 'AM' : 'PM');
    },
    // {minute}   =  '0' - '59'
    // {minute2}  = ' 0' - '59' (space padded)
    // {minute02} = '00' - '59'
    //
    'minute': function(date, utc)
    {
        var minute = utc ? date.getUTCMinutes() : date.getMinutes(); // [0,59]
        return minute;
    },
    'minute2': function(date, utc)
    {
        var minute = utc ? date.getUTCMinutes() : date.getMinutes(); // [0,59]
        return space_pad2(minute);
    },
    'minute02': function(date, utc)
    {
        var minute = utc ? date.getUTCMinutes() : date.getMinutes(); // [0,59]
        return zero_pad2(minute);
    },
    // {second}   =  '0' - '59'
    // {second2}  = ' 0' - '59' (space padded)
    // {second02} = '00' - '59'
    //
    'second': function(date, utc)
    {
        var second = utc ? date.getUTCSeconds() : date.getSeconds(); // [0,59]
        return second;
    },
    'second2': function(date, utc)
    {
        var second = utc ? date.getUTCSeconds() : date.getSeconds(); // [0,59]
        return space_pad2(second);
    },
    'second02': function(date, utc)
    {
        var second = utc ? date.getUTCSeconds() : date.getSeconds(); // [0,59]
        return zero_pad2(second);
    },
    // {msec}   =   '0' - '999'
    // {msec3}  = '  0' - '999' (space padded)
    // {msec03} = '000' - '999'
    //
    'msec': function(date, utc)
    {
        var msec =
            utc ? date.getUTCMilliseconds() : date.getMilliseconds(); // [0,999]
        return msec;
    },
    'msec3': function(date, utc)
    {
        var msec =
            utc ? date.getUTCMilliseconds() : date.getMilliseconds(); // [0,999]
        return space_pad3(msec);
    },
    'msec03': function(date, utc)
    {
        var msec =
            utc ? date.getUTCMilliseconds() : date.getMilliseconds(); // [0,999]
        return zero_pad3(msec);
    },
    // {open} = '{' (in case you actually want '{' in the output)
    //
    'open': function(date, utc)
    {
        return '{';
    },
    // {close} = '}' (in case you actually want '}' in the output)
    //
    'close': function(date, utc)
    {
        return '}';
    },
};

function format_date(date, pattern, utc)
{
    if (!pattern)
    {
        pattern = '{month}/{day}/{year4}';
    }

    var ret = '';

    while (pattern.length > 0)
    {
        var s = pattern.indexOf('{');
        var e = pattern.indexOf('}');
        //console.log('s ' + s + ' e ' + e);
        if (-1 !== s && -1 !== e && s < e)
        {
            // - there is a well-formed {foo} in range [s,e]
            // - first we emit range [0,s) as literal
        }
        else
        {
            // - rest of string has no {} or has malformed }{ or { or }
            // - just emit the rest of the string as literal and be done
            s = pattern.length;
        }
        // emit range [0,s) as literal
        if (s > 0)
        {
            ret += pattern.substr(0, s);
            pattern = pattern.substr(s);
            e -= s;
            s = 0;
        }

        if (0 === pattern.length) break;

        // emit range [s=0,e] by evaluating code
        console.assert(0 === s); // position of {
        console.assert(e > 0);  // position of }
        console.assert('{' === pattern.substr(s, 1));
        console.assert('}' === pattern.substr(e, 1));
        var code = pattern.substr(1,e-1);
        var func = format_date_funcs[code];
        console.assert(func);
        ret += func(date, utc);

        pattern = pattern.substr(e+1);
    }

    return ret;
}

if (1) // test format_date
{
    var fmt = '[';
    for (var func in format_date_funcs)
    {
        if (!format_date_funcs.hasOwnProperty(func)) continue;
        fmt += '{' + func + '}/';
    }
    fmt += ']';
    var now = new Date();
    console.log(fmt);
    console.log(format_date(now, fmt, false /* utc */));
    console.log(format_date(now, fmt, true /* utc */));
}

于 2019-08-05T18:58:17.897 に答える
-3

これは役に立ちます:

export const formatDateToString = date => {
    if (!date) {
        return date;
    }
    try {
        return format(parse(date, 'yyyy-MM-dd', new Date()), 'dd/MM/yyyy');
    } catch (error) {
        return 'invalid date';
    }
};
于 2021-02-19T12:30:40.450 に答える