سؤال

كيف يمكنني إنشاء اسم الشهر (على سبيل المثال:أكتوبر/أكتوبر) من كائن التاريخ هذا في JavaScript؟

var objDate = new Date("10/11/2009");
هل كانت مفيدة؟

المحلول

ونسخة مختصرة:

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

const d = new Date();
document.write("The current month is " + monthNames[d.getMonth()]);

<قوية> ملاحظة (2019/03/08) - هذه الإجابة من طرف لي التي كتبت في الأصل في عام 2009 هي التي عفا عليها الزمن. انظر ديفيد ستوري في الإجابة للحصول على أفضل حل.

نصائح أخرى

أصبح من الممكن الآن القيام بذلك باستخدام ECMAScript Internationalization API:

const date = new Date(2009, 10, 10);  // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);

'long' يستخدم الاسم الكامل للشهر، 'short' للاسم المختصر، و 'narrow' للحصول على نسخة أكثر بساطة، مثل الحرف الأول في اللغات الأبجدية.

يمكنك تغيير اللغة من المتصفح 'default' إلى أي شيء تريده (على سبيل المثال. 'en-us')، وسيستخدم الاسم الصحيح لتلك اللغة/البلد.

مع toLocaleStringواجهة برمجة التطبيقات عليك أن تمر في اللغة والخيارات في كل مرة.إذا كنت ستستخدم نفس المعلومات المحلية وخيارات التنسيق في عدة تواريخ مختلفة، فيمكنك استخدامها Intl.DateTimeFormat بدلاً من:

const formatter = new Intl.DateTimeFormat('fr', { month: 'short' });
const month1 = formatter.format(new Date());
const month2 = formatter.format(new Date(2003, 5, 12));
console.log(`${month1} and ${month2}`); // current month in French and "juin".

لمزيد من المعلومات، راجع منشور مدونتي على واجهة برمجة التطبيقات للتدويل.

وهنا واحد آخر، مع دعم لتوطين:)

Date.prototype.getMonthName = function(lang) {
    lang = lang && (lang in Date.locale) ? lang : 'en';
    return Date.locale[lang].month_names[this.getMonth()];
};

Date.prototype.getMonthNameShort = function(lang) {
    lang = lang && (lang in Date.locale) ? lang : 'en';
    return Date.locale[lang].month_names_short[this.getMonth()];
};

Date.locale = {
    en: {
       month_names: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
       month_names_short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    }
};

وبعد ذلك يمكنك بسهولة إضافة دعم لغات أخرى:

Date.locale.fr = {month_names: [...]};

إذا كنت لا تمانع في توسيع نطاق نموذج التسجيل (وهناك بعض الأسباب الوجيهة للا تريد أن تفعل ذلك)، يمكنك أن تأتي فعليا حتى مع طريقة سهلة جدا:

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

Date.prototype.getMonthName = function() {
    return this.monthNames[this.getMonth()];
};
Date.prototype.getShortMonthName = function () {
    return this.getMonthName().substr(0, 3);
};

// usage:
var d = new Date();
alert(d.getMonthName());      // "October"
alert(d.getShortMonthName()); // "Oct"

وبعد ذلك سوف يتم تطبيق هذه الوظائف إلى <م> جميع جافا سكريبت تاريخ الكائنات.

أوصي بحرارة format وظيفة من moment.js المكتبة، والتي يمكنك استخدامها مثل هذا:

moment().format("MMM");  // "Apr" - current date
moment(new Date(2012, 01, 04)).format("MMM");  // "Feb" - from a local date
moment.utc(new Date(2012, 00, 04).format("MMM"); // "Jan" - from a UTC date

استخدم "MMMM" بدلاً من "MMM" إذا كنت تريد الاسم الكامل للشهر

بالإضافة إلى قائمة طويلة من الميزات الأخرى، فهي قوية دعم التدويل.

Date.prototype.getMonthName = function() {
    var monthNames = [ "January", "February", "March", "April", "May", "June", 
                       "July", "August", "September", "October", "November", "December" ];
    return monthNames[this.getMonth()];
}

ويمكن استخدامه ك

var month_Name = new Date().getMonthName();

هل يمكن استخدام datejs للقيام بذلك. تحقق من ، MMMM يعطيك اسم الشهر:

var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));

وdatejs حصل ذلك مترجمة لأكثر من 150 لغات! انظر هنا

ويمكن أن يتم بعض عملية سهلة مشتركة من وجوه التاريخ هذا.

var monthNames = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
];
var monthShortNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
];

function dateFormat1(d) {
  var t = new Date(d);
  return t.getDate() + ' ' + monthNames[t.getMonth()] + ', ' + t.getFullYear();
}

function dateFormat2(d) {
  var t = new Date(d);
  return t.getDate() + ' ' + monthShortNames[t.getMonth()] + ', ' + t.getFullYear();
}

console.log(dateFormat1(new Date()))
console.log(dateFormat2(new Date()))

وأو يمكنك جعل تاريخ النموذج مثل

Date.prototype.getMonthName = function() {
  var monthNames = ["January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"
  ];
  return monthNames[this.getMonth()];
}


Date.prototype.getFormatDate = function() {
  var monthNames = ["January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"
  ];
  return this.getDate() + ' ' + monthNames[this.getMonth()] + ', ' + this.getFullYear();
}


console.log(new Date().getMonthName())
console.log(new Date().getFormatDate())

مثال:

وvar dateFormat3 = new Date().getMonthName(); # March

وvar dateFormat4 = new Date().getFormatDate(); # 16 March, 2017

وجرب:

var objDate = new Date("10/11/2009");

var strDate =
    objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
    objDate.toLocaleString("en", { month: "long"  }) + ' ' +
    objDate.toLocaleString("en", { year: "numeric"});

إليك طريقة لا تعتمد على مصفوفة مشفرة وتدعم لغات متعددة.

إذا كنت بحاجة إلى مجموعة كاملة:

var monthsLocalizedArray = function(locale) {
    var result = [];
    for(var i = 0; i < 12; i++) {
        result.push(new Date(2010,i).toLocaleString(locale,{month:"long"}));
    }
    return result;
};

الاستخدام:

console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]

إذا كنت بحاجة إلى شهر محدد فقط (أسرع):

var monthLocalizedString = function(month, locale) {
    return new Date(2010,month).toLocaleString(locale,{month:"long"});
};

الاستخدام:

console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar

تم اختباره ويعمل بشكل جيد على Chrome وIE 11.هناك حاجة إلى بعض التعديلات في موزيلا، لأنها تُرجع التاريخ بأكمله.

ومما يؤسف له أن أفضل طريقة لاستخراج اسم الشهر هي من تمثيل UTCString:

Date.prototype.monthName = function() {
    return this.toUTCString().split(' ')[2]
};

d = new Date();
//=> Thu Mar 06 2014 23:05:21 GMT+0000 (GMT)

d.monthName();
//=> 'Mar'

وتنسيق الطبيعي هذه الأيام هو استخدام Moment.js.

ووسيلة للحصول على الشهر في شكل سلسلة، بسيط جدا في Moment.js لا حاجة إلى رمز الثابت أسماء الشهر في التعليمات البرمجية: للحصول على الشهر الحالي والسنة في شكل اسم الشهر وسنة كاملة (مايو 2015):

  moment(new Date).format("MMMM YYYY");

وبدلا من إعلان مجموعة الذي عقد عن اسم الشهر ثم لافتا مع فهرس، يمكننا أيضا أن الكتابة في نسخة مختصرة على النحو التالي:

var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug

ويمكنك استخدام واحدة من عدة منسقات التسجيل المتاحة. لأن هذا يندرج ضمن مواصفات جافا سكريبت، وسوف تكون متاحة في كل متصفح ومن جانب الخادم وسائط.

objDate.toString().split(" ")[1]; // gives short name, unsure about locale 
objDate.toLocaleDateString.split(" ")[0]; // gives long name

ومنها مثلا.

js> objDate = new Date(new Date() - 9876543210)
Mon Feb 04 2013 12:37:09 GMT-0800 (PST)
js> objDate.toString().split(" ")[1]
Feb
js> objDate.toLocaleString().split(" ")[0]
February

وهناك أكثر على HTTPS: // المطور. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

momentjs ، ومجرد استخدام في تنسيق التدوين.

const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August

وتخزين الأسماء في مجموعة والبحث من قبل مؤشر من الشهر الجاري.

var month=new Array(12);
month[0]="January";
month[1]="February";
month[2]="March";
month[3]="April";
month[4]="May";
month[5]="June";
month[6]="July";
month[7]="August";
month[8]="September";
month[9]="October";
month[10]="November";
month[11]="December";

document.write("The current month is " + month[d.getMonth()]);

جافا سكريبت getMonth () طريقة

إذا كنت تستخدم مسج، وربما كنت أيضا باستخدام مسج UI، مما يعني أنه يمكنك استخدام $. datepicker.formatDate () .

$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] );   // dutch
$.datepicker.formatDate( "dd MM yy", objDate );

إذا كنت لا تريد استخدام مكتبة خارجية، أو تخزين مجموعة من الأسماء شهر، أو إذا كان API ECMAScript التدويل ليست جيدة بما فيه الكفاية بسبب التوافق المتصفح يمكنك أن تفعل دائما بالطريقة القديمة عن طريق استخراج معلومات من إخراج التاريخ:

var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);

وهذا من شأنه أن يعطي لك اسم الشهر مختصرة، على سبيل المثال، أكتوبر أعتقد أن تاريخ تأتي في جميع أنواع صيغ اعتمادا على التهيئة واللغة الخاصة بك حتى نلقي نظرة على ما toDateString() العوائد وإعادة حساب القيم substring() الخاص بناء على ذلك.

وبلدي أفضل حل هو على النحو التالي:

       var dateValue = Date();
       var month = dateValue.substring(4,7);
       var date = dateValue.substring(8,10);
       var year = dateValue.substring(20,24);
       var finaldateString = date+"-"+month+"-"+year;

إذا كنت لا تريد استخدام لحظة وترغب في عرض اسم الشهر -

.config($mdDateLocaleProvider) {
    $mdDateLocaleProvider.formatDate = function(date) {      
      if(date !== null) {
        if(date.getMonthName == undefined) {
          date.getMonthName = function() {
            var monthNames = [ "January", "February", "March", "April", "May", "June", 
            "July", "August", "September", "October", "November", "December" ];
            return monthNames[this.getMonth()];
          }
        }        
        var day = date.getDate();
        var monthIndex = date.getMonth();
        var year = date.getFullYear();
        return day + ' ' + date.getMonthName() + ' ' + year;
      }
    };
  }

ويمكن القيام بذلك أيضا إذا كنت تستخدم كندو.

kendo.toString(dateobject, "MMMM");

وفيما يلي قائمة من منسقات من الموقع كندو :

<اقتباس فقرة>   

و"د" يجعل يوم من الشهر، من 1 إلى 31.

     

و"ي" ويوم من الشهر، من 01 إلى 31.

     

و"DDD" اسم مختصر من يوم من أيام الأسبوع.

     

و"DDDD" والاسم الكامل لليوم من أيام الأسبوع.

     

و"و" إن أعشار من الثانية في قيمة التاريخ والوقت.

     

و"وما يليها" إن المئات من الثانية في قيمة التاريخ والوقت.

     

و"FFF" إن ميلي ثانية في قيمة التاريخ والوقت.

     

و"M" في الشهر، من 1 إلى 12.

     

و"MM" إن شهر، من 01 إلى 12.

     

و"MMM" اسم مختصر من الشهر الجاري.

     

و"MMMM" الاسم الكامل من الشهر الجاري.

     

و"ح" إن ساعة، وذلك باستخدام 12 ساعة 1-12.

     

و"ح ح" إن ساعة، وذلك باستخدام 12 ساعة 01-12.

     

و"H" وساعة، وذلك باستخدام مدار الساعة على مدار 24 ساعة 1-23.

     

و"سمو" إن ساعة، وذلك باستخدام مدار الساعة على مدار 24 ساعة 01-23.

     

و"م" في اللحظة، من 0 إلى 59.

     

و"مم" في اللحظة، من 00 إلى 59.

     

و"ليالي" والثانية، من 0 إلى 59.

     

و"SS" والثانية، من 00 إلى 59.

     

و"ترينيداد وتوباغو" إن AM / PM التسمية.

     

و"YY" وآخر حرفين من قيمة السنة.

     

و"س س س س" قيمة كامل السنة.

     

و"ضاد ضاد ضاد" إن التوقيت المحلي عند استخدام صيغ تحليل السلاسل تاريخ UTC.

ولدي الحل الجزئي الذي خطرت لي. ويستخدم تعبير عادي لاستخراج اسم الشهر واليوم. ولكن كما قلت ننظر من خلال المنطقة وخيارات اللغة (ويندوز) وأنا أدرك أن الثقافات المختلفة لها ترتيب شكل مختلف ... ربما نمط التعبير العادي أفضل يمكن أن تكون مفيدة.

function testDateInfo() {
        var months = new Array();
        var days = new Array();
        var workingDate = new Date();
        workingDate.setHours(0, 0, 0, 0);
        workingDate.setDate(1);
        var RE = new RegExp("([a-z]+)","ig");
        //-- get day names 0-6
        for (var i = 0; i < 7; i++) {

            var day = workingDate.getDay();
            //-- will eventually be in order
            if (days[day] == undefined)
                days[day] = workingDate.toLocaleDateString().match(RE)[0];
            workingDate.setDate(workingDate.getDate() + 1);
        }
        //--get month names 0-11
        for (var i = 0; i < 12; i++) {
            workingDate.setMonth(i);
            months.push(workingDate.toLocaleDateString().match(RE)[1]);
        }
        alert(days.join(",") + " \n\r " + months.join(","));
    }
function getMonthName(month) 
{ 
return ["January","February","March","April","May","June","July","August","September", "October","November","December"][parseInt(month)-1]
}

وهناك طريقة أخرى لتنسيق التاريخ

new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"

وفقط تمتد على العديد من الإجابات ممتازة أخرى - إذا كنت تستخدم مسج - هل يمكن أن تفعل شيئا من هذا القبيل

$.fn.getMonthName = function(date) {

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

    return monthNames[date.getMonth()];

};

وحيث date تساوي var d = new Date(somevalue). والميزة الرئيسية لهذا هي فيnickf قال حول تجنب مساحة الاسم العالمي.

لتحصل على مجموعة من اسم الشهر:

Date.monthNames = function( ) {
var arrMonth = [],
    dateRef = new Date(),
    year = dateRef.getFullYear();

dateRef.setMonth(0);
while (year == dateRef.getFullYear()) {
    /* push le mois en lettre et passe au mois suivant */
    arrMonth.push( (dateRef.toLocaleString().split(' '))[2] );
    dateRef.setMonth( dateRef.getMonth() + 1);
}

return arrMonth;
}

alert(Date.monthNames().toString());

// -> janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre

http://jsfiddle.net/polinux/qb346/

استخدم هذه زميله

function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}

واكتبوا مجمع بسيط حول toLocaleString:

function LocalDate(locale) {
  this.locale = locale;
}

LocalDate.prototype.getMonthName = function(date) {
  return date.toLocaleString(this.locale,{month:"long"});
};

var objDate = new Date("10/11/2009");

var localDate = new LocalDate("en");
console.log(localDate.getMonthName(objDate));

localDate.locale = "ru";
console.log(localDate.getMonthName(objDate));

localDate.locale = "zh";
console.log(localDate.getMonthName(objDate));

والإختراق سريع اعتدت الذي يعمل بشكل جيد:

const monthNumber = 8;
const yearNumber = 2018;
const date = `${['Jan', 'Feb', 'Mar', 'Apr',
  'May', 'Jun', 'Jul', 'Aug',
  'Sep', 'Oct', 'Nov', 'Dec'][monthNumber - 1]
      } ${yearNumber}`;

console.log(date);

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top