รับชื่อเดือนจากวันที่


672

ฉันจะสร้างชื่อของเดือน (เช่น: ตุลาคม / ตุลาคม) จากวัตถุวันที่ใน JavaScript ได้อย่างไร

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

จะดีถ้าstackoverflow.com/a/18648314/5846045สามารถได้รับการยอมรับเพื่อเป็นแนวทางให้ผู้อ่านในอนาคตจะได้คำตอบที่ดีกว่า
Boghyon Hoffmann

คำตอบ:


1138

รุ่นที่สั้นกว่า:

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 นี้ล้าสมัยแล้ว ดูคำตอบของ David Storeyสำหรับวิธีแก้ปัญหาที่ดีกว่า


401
มันค่อนข้างน่าผิดหวังที่ได้new Date()กลับมาTue Sep 06 2011 20:02:25 GMT+0200 (CEST)ซึ่งหมายถึงวัตถุวันที่ที่มีอยู่แล้วทั้งหมดนี้ (ชื่อเดือนและสัปดาห์วัน) มันไม่ได้เป็นสาธารณะดังนั้นเราจึงต้องพิมพ์อีกครั้ง :(
zanona

9
ไม่ใช่วิธีแก้ปัญหาที่เหมาะสมหากต้องรวมชื่อเดือนสำหรับแต่ละภาษาที่รองรับ มีก็จะเป็นวิธีที่ดีกว่าการใช้String#splitด้วยหรือtoString toDateString
Ryan

23
หลายภาษา = อาเรย์หลายมิติ;) การแปล ["monthName"] [currentLanguage] [d.getMonth ()]
nuala

25
@ zanona - วัตถุวันที่ไม่จำเป็นต้องมี "ทั้งหมดนี้กำหนดไว้ภายใน" สิ่งที่ต้องการใน ECMA-262 คือค่าเวลาซึ่งเป็นตัวเลข สิ่งที่คุณเห็นคือผลลัพธ์ของDate.prototype.toStringซึ่งขึ้นอยู่กับการใช้งาน
RobG

9
@Devin แต่จะทำการจัดสรรอาร์เรย์ใหม่ทุกครั้งที่คุณต้องการเข้าถึง
โคลจอห์นสัน

777

ตอนนี้คุณสามารถทำได้ด้วย 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') และมันจะใช้ชื่อที่ถูกต้องสำหรับภาษา / ประเทศนั้น ๆ

ด้วยtoLocaleStringAPIคุณต้องผ่านสถานที่และตัวเลือกในแต่ละครั้ง หากคุณกำลังใช้ข้อมูลสถานที่เดียวกันและตัวเลือกการจัดรูปแบบในวันที่แตกต่างกันหลายวันคุณสามารถใช้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".

สำหรับข้อมูลเพิ่มเติมโปรดดูที่โพสต์บล็อกของฉันในสากล API


1
ฉันสามารถยืนยันได้ว่า Safari Technology Preview รองรับสิ่งนี้ ฉันคิดว่าควรเป็นคำตอบที่ได้รับการยอมรับ
Salman Hasrat Khan

1
ทำงานในโหนดด้วย!
mikemaccana

4
ทางออกที่ดี แต่สำหรับกรณีการใช้งานของฉันสิ่งนี้จบลงด้วยการช้าเกินไป ฉันกำลังประมวลผลหลายร้อยรายการและมันเฉลี่ยประมาณ 1 มิลลิวินาทีต่อรายการเพื่อให้ได้ทั้งเดือนและปี (โครมซาฟารี) ฉันลงเอยด้วยการใช้คำตอบที่ยอมรับ แต่เพียงเพราะมันทำได้ดีกว่ามาก นี่จะเป็นวิธีที่ฉันชอบถ้าฉันต้องการเรียกมันสองสามครั้งเท่านั้น
t.888

7
ตอนนี้รองรับเบราว์เซอร์ส่วนใหญ่แล้ว: caniuse.com/#search=intl
eyal83

2
หมายเหตุเกี่ยวกับ React Native อุปกรณ์นี้ใช้งานได้กับอุปกรณ์ iOS แต่สำหรับ Android จะแสดงอย่างไม่ถูกต้อง (แยกเวลาออกทั้งหมด)
hardanger

162

นี่คืออีกหนึ่งการสนับสนุนการแปล :)

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: [...]};

2
หมายเหตุนี้จะไม่ทำงานบนโหนดณ 6.x เป็นคือDate.locale undefinedมันเป็นคำตอบที่ยอดเยี่ยมสำหรับการใช้งาน JS อื่น ๆ !
mikemaccana

ซึ่งอาจทำให้รู้สึกว่าอาร์เรย์ชื่อภาษาท้องถิ่นที่ถูกสร้างขึ้นโดยใช้Date.prototype.toLocaleString นอกจากนี้การขยายตัวต้นแบบและวัตถุในตัวก็ไม่ถือว่าเป็นความคิดที่ดี
RobG

62

หากคุณไม่คิดที่จะขยายต้นแบบวันที่ (และมีเหตุผลที่ดีที่ไม่ต้องการทำเช่นนี้) คุณสามารถหาวิธีที่ง่ายมาก:

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"

ฟังก์ชั่นเหล่านี้จะนำไปใช้กับวัตถุวันที่จาวาสคริปต์ทั้งหมด


6
"และมีเหตุผลที่ดีที่ไม่ต้องการทำเช่นนี้" แค่อยากรู้: คุณหมายถึงเหตุผลใด
KooiInc

13
@Kooilnc: เป็นเพราะคุณทำงานในอวกาศเป็นหลัก หากคุณนำเข้าฟังก์ชั่นหรือไลบรารีของบุคคลอื่นซึ่งทำสิ่งนี้ด้วยเช่นกันพวกเขาอาจเขียนทับกันได้
nickf

61

ฉันขอแนะนำ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" หากคุณต้องการชื่อเต็มของเดือน

นอกเหนือไปจากรายการยาวของคุณสมบัติอื่น ๆ ก็มีที่แข็งแกร่งสนับสนุนสำหรับสากล


2
คนแรกจะส่งผลให้ "เม.ย. " "MMM" แสดงตัวอักษรสามตัวแรกของเดือนหากคุณต้องการให้ชื่อเต็มใช้ "MMMM" แทน ดูเอกสารประกอบของพวกเขาสำหรับความช่วยเหลือ
Tomnar

หากคุณกำลังไปสู่เส้นทางของการเพิ่มประสิทธิภาพอย่างมากและลดคำขอ HTTP นี่อาจไม่ใช่ตัวเลือกสำหรับคุณ ให้ใช้เพียงชื่ออาร์เรย์หนึ่งเดือนแทนหากคุณจะจัดรูปแบบชื่อเดือนในรหัสบรรทัดเดียว
OzzyTheGiant

3
ช่วงเวลาเป็นห้องสมุดที่มีขนาดใหญ่มากและเกินความเป็นจริงสำหรับสิ่งนี้ ทางเลือกที่ทันสมัยรวมLuxonและdate-fnsแต่แล้วอีกครั้งมีการสนับสนุนเบราว์เซอร์กว้างสำหรับสากล API ในปัจจุบัน
Dan Dascalescu

21
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();

18

กระบวนการง่ายๆทั่วไปบางอย่างจากวัตถุวันที่สามารถทำได้โดยสิ่งนี้

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())

Ex:

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

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


2
ขอบคุณ! ฉันยังไม่เข้าใจต้นแบบ แต่ฉันตั้งตาคอยที่จะลองทำเช่นนี้
Eric Hepperle - CodeSlayer2010

17

คุณอาจใช้datejsทำเช่นนั้น ตรวจสอบFormatSpecifiers , MMMM ให้ชื่อเดือนกับคุณ:

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

และ datejs ได้รับการแปลเป็นภาษาท้องถิ่นมานานกว่า 150 แห่ง! ดูที่นี่


12

ลอง:

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

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

สิ่งนี้ใช้ได้ในฤดูหนาวปี 2017! การใช้ "en-us" ตามคำแนะนำของผู้ใช้รายอื่น ๆ 3 ปีขึ้นไปจึงไม่สามารถใช้งานได้ใน Chrome
Eric Hepperle - CodeSlayer2010

9

นี่คือวิธีที่ไม่ขึ้นอยู่กับอาเรย์ฮาร์ดโค้ดและรองรับหลายภาษา

หากคุณต้องการอาร์เรย์ทั้งหมด:

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 ใน mozilla จำเป็นต้องมีการแก้ไขเนื่องจากจะส่งคืนทั้งวัน


สิ่งนี้จะไม่สามารถใช้งานได้แม้ใน safary เนื่องจากtoLocaleString
Sergei Panfilov

8

น่าเสียดายที่วิธีที่ดีที่สุดในการแยกชื่อเดือนนั้นมาจากการเป็นตัวแทน 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'

8

แทนที่จะประกาศอาร์เรย์ที่มีชื่อเดือนทั้งหมดแล้วชี้ไปที่ดัชนีเรายังสามารถเขียนมันในเวอร์ชั่นที่สั้นกว่าดังด้านล่าง:

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

โปรดทราบว่าวิธีนี้ใช้ไม่ได้กับเบราว์เซอร์ที่เชื่อถือได้ ... Safari (มือถือและเดสก์ท็อป) จะแสดงผลออกมาดังนี้: MAY 1, 2015 AT 12:00:00 AM GMT-4(เมื่อใช้{ month: "long" }พารามิเตอร์)
David M.

1
นอกจากนี้คุณยังสามารถรับค่าเริ่มต้นโดยใช้new Date().toLocaleString(navigator.language, { month: "short" })
Remo H. Jansen


7

รูปแบบที่เป็นธรรมชาติในวันนี้คือการใช้ Moment.js

วิธีรับเดือนในรูปแบบสตริงนั้นง่ายมากใน Moment.js ไม่จำเป็นต้องเขียนโค้ดชื่อเดือนในรหัสของคุณอย่างหนัก: ในการรับเดือนและปีปัจจุบันในรูปแบบชื่อเดือนและปีเต็ม (พฤษภาคม 2558):

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

ด้วยช่วงเวลาที่ติดตั้งไว้แล้วเพื่อจุดประสงค์อื่นนี่เป็นทางออกที่ง่ายที่สุด
การสนับสนุน CFP

1
ช่วงเวลาเป็นห้องสมุดที่มีขนาดใหญ่มากและเกินความเป็นจริงสำหรับสิ่งนี้ ทางเลือกที่ทันสมัยรวมLuxonและdate-fnsแต่แล้วอีกครั้งมีการสนับสนุนเบราว์เซอร์กว้างสำหรับสากล API ในปัจจุบัน
Dan Dascalescu

7

อีกวิธีในการจัดรูปแบบวันที่

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

6

คุณสามารถใช้หนึ่งในหลายรูปแบบวันที่พร้อมใช้งาน เนื่องจากสิ่งนี้อยู่ในข้อกำหนดของ JavaScript จึงสามารถใช้ได้ทั้งในเบราว์เซอร์และโหมดฝั่งเซิร์ฟเวอร์

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://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date


4

หากคุณไม่ต้องการใช้ห้องสมุดภายนอกหรือเก็บชื่ออาร์เรย์ของเดือนหรือถ้า ECMAScript Internationalization API ไม่ดีพอเนื่องจากความเข้ากันได้ของเบราว์เซอร์คุณสามารถทำสิ่งที่ล้าสมัยโดยแยกข้อมูลจาก เอาท์พุทวันที่:

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

สิ่งนี้จะให้ชื่อเดือนที่สั้นเช่นคุณเชื่อว่าวันที่จะมาในรูปแบบที่หลากหลายขึ้นอยู่กับการเริ่มต้นและที่ตั้งของคุณดังนั้นให้ดูที่toDateString()ผลตอบแทนและคำนวณsubstring()ค่าของคุณใหม่


3

หากคุณกำลังใช้ jQuery คุณอาจจะยังใช้ jQuery UI ซึ่งหมายความว่าคุณสามารถใช้$ .datepicker.formatDate ()

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

3

ทางออกที่ดีที่สุดของฉันมีดังนี้:

       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;

ดูเหมือนจะเปราะบางสำหรับฉัน ... และมันไม่ได้ตอบคำถามของ OP จริง ๆ
David M.

1
อะไรทำให้ "ทางออกที่ดีที่สุด" ของคุณคืออะไร
Dan Dascalescu

3

ด้วยmomentjsเพียงใช้สัญกรณ์รูปแบบ

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

1
นอกจากนี้คำตอบนี้ได้รับ 2 ครั้งแล้วmomentเป็นห้องสมุดที่มีขนาดใหญ่มาก ทางเลือกที่ทันสมัยรวมLuxonและdate-fnsแต่แล้วอีกครั้งมีการสนับสนุนเบราว์เซอร์กว้างสำหรับสากล API ในปัจจุบัน
Dan Dascalescu

3

สิ่งนี้สามารถทำได้หากคุณใช้เคนโด้

kendo.toString(dateobject, "MMMM");

นี่คือรายการตัวจัดรูปแบบจากไซต์เคนโด้ :

"d" แสดงวันของเดือนจาก 1 ถึง 31

"dd" วันของเดือนจาก 01 ถึง 31

"ddd" ชื่อย่อของวันในสัปดาห์

"dddd" ชื่อเต็มของวันในสัปดาห์

"f" สิบส่วนของวินาทีในค่าวันที่และเวลา

"ff" ร้อยของวินาทีในค่าวันที่และเวลา

"fff" มิลลิวินาทีในค่าวันที่และเวลา

"M" เดือนตั้งแต่ 1 ถึง 12

"MM" เดือนจาก 01 ถึง 12

"MMM" ชื่อย่อของเดือน

"MMMM" ชื่อเต็มของเดือน

"h" ชั่วโมงใช้เวลา 12 ชั่วโมงจาก 1 ถึง 12

"hh" ชั่วโมงใช้เวลา 12 ชั่วโมงจาก 01 ถึง 12

"H" ชั่วโมงใช้เวลา 24 ชั่วโมงจาก 1 ถึง 23

"HH" ชั่วโมงใช้เวลา 24 ชั่วโมงจาก 01 ถึง 23

"m" นาทีตั้งแต่ 0 ถึง 59

"mm" นาทีจาก 00 ถึง 59

"s" วินาทีจาก 0 ถึง 59

"ss" วินาทีจาก 00 ถึง 59

"tt" ตัวกำหนด AM / PM

"yy" อักขระสองตัวสุดท้ายจากค่าปี

"yyyy" มูลค่าเต็มปี

"zzz" เขตเวลาท้องถิ่นเมื่อใช้รูปแบบเพื่อแยกสตริงวันที่ UTC


3

คุณสามารถใช้ Date.toLocaleDateString () และแยกวิเคราะห์วันที่ที่ต้องการเป็นพารามิเตอร์ได้

const event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

const options = {  year: 'numeric', month: 'short', day: 'numeric' };

console.log(event.toLocaleDateString('de-DE', options));
// expected output: Donnerstag, 20. Dezember 2012

console.log(event.toLocaleDateString('en-US', options));
// US format 


// In case you only want the month
console.log(event.toLocaleDateString(undefined, { month: 'short'}));
console.log(event.toLocaleDateString(undefined, { month: 'long'}));

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ในเอกสารประกอบ Firefox


2

หากคุณไม่ต้องการใช้ช่วงเวลาและต้องการแสดงชื่อเดือน -

.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;
      }
    };
  }

2

สำหรับฉันนี่คือทางออกที่ดีที่สุดคือ

สำหรับ TypeScript เช่นกัน

const env = process.env.REACT_APP_LOCALE || 'en';

const namedMonthsArray = (index?: number): string[] | string => {
  const months = [];

  for (let month = 0; month <= 11; month++) {
    months.push(
      new Date(new Date('1970-01-01').setMonth(month))
        .toLocaleString(env, {
          month: 'long',
        })
        .toString(),
    );
  }
  if (index) {
    return months[index];
  }
  return months;
};

ผลผลิตคือ

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

1

เก็บชื่อไว้ในอาร์เรย์และค้นหาตามดัชนีของเดือน

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()]);

JavaScript getMonth () วิธีการ


22
ทำไมvar month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];ล่ะ สั้นกว่าการเพิ่มทีละส่วน ...
Fizzix

1

ฉันมีทางออกบางส่วนที่ฉันคิดขึ้นมา มันใช้การแสดงออกปกติเพื่อแยกชื่อเดือนและวัน แต่เมื่อฉันดูตัวเลือกภูมิภาคและภาษา (Windows) ฉันรู้ว่าวัฒนธรรมที่ต่างกันมีรูปแบบที่ต่างกัน ... บางทีรูปแบบการแสดงออกปกติที่ดีกว่าอาจมีประโยชน์

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(","));
    }

ดังนั้นจึงใช้งานได้น้อยกับภาษาอังกฤษและภาษาสเปน ... id ของสิ่งที่สงสัยว่าเป็นวันเดือนเดือนปีรูปแบบ
Remus

ฉันคิดว่าฉันมีทางออกที่เป็นอิสระอย่างแท้จริงในภาษาที่คุณจะต้องมีการแสดงออกปกติที่ใช้ช่วงอักขระ UNICODE ช่วงตัวละครจะแตกต่างกันไปตามตัวอักษรที่แตกต่างกันดังนั้นฉันไม่คิดว่าจะมีขนาดเดียวที่เหมาะกับ RegExp ทั้งหมดที่เราสามารถใช้ได้
รีมัส

0

เพียงขยายคำตอบที่ยอดเยี่ยมอื่น ๆ อีกมากมาย - ถ้าคุณใช้ jQuery - คุณสามารถทำอะไรบางอย่างเช่น

$.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 พูดเกี่ยวกับการหลีกเลี่ยง namespace ทั่วโลก


0

ในการรับอาร์เรย์ชื่อเดือนให้ทำดังนี้

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/


0

เพียงเขียนเสื้อคลุมเรียบง่ายรอบ ๆ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));


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.