ฉันจะสร้างชื่อของเดือน (เช่น: ตุลาคม / ตุลาคม) จากวัตถุวันที่ใน JavaScript ได้อย่างไร
var objDate = new Date("10/11/2009");
ฉันจะสร้างชื่อของเดือน (เช่น: ตุลาคม / ตุลาคม) จากวัตถุวันที่ใน 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 นี้ล้าสมัยแล้ว ดูคำตอบของ David Storeyสำหรับวิธีแก้ปัญหาที่ดีกว่า
new Date()
กลับมาTue Sep 06 2011 20:02:25 GMT+0200 (CEST)
ซึ่งหมายถึงวัตถุวันที่ที่มีอยู่แล้วทั้งหมดนี้ (ชื่อเดือนและสัปดาห์วัน) มันไม่ได้เป็นสาธารณะดังนั้นเราจึงต้องพิมพ์อีกครั้ง :(
String#split
ด้วยหรือtoString
toDateString
ตอนนี้คุณสามารถทำได้ด้วย 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
APIคุณต้องผ่านสถานที่และตัวเลือกในแต่ละครั้ง หากคุณกำลังใช้ข้อมูลสถานที่เดียวกันและตัวเลือกการจัดรูปแบบในวันที่แตกต่างกันหลายวันคุณสามารถใช้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
นี่คืออีกหนึ่งการสนับสนุนการแปล :)
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.locale
undefined
มันเป็นคำตอบที่ยอดเยี่ยมสำหรับการใช้งาน JS อื่น ๆ !
หากคุณไม่คิดที่จะขยายต้นแบบวันที่ (และมีเหตุผลที่ดีที่ไม่ต้องการทำเช่นนี้) คุณสามารถหาวิธีที่ง่ายมาก:
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" หากคุณต้องการชื่อเต็มของเดือน
นอกเหนือไปจากรายการยาวของคุณสมบัติอื่น ๆ ก็มีที่แข็งแกร่งสนับสนุนสำหรับสากล
Luxon
และdate-fns
แต่แล้วอีกครั้งมีการสนับสนุนเบราว์เซอร์กว้างสำหรับสากล API ในปัจจุบัน
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();
กระบวนการง่ายๆทั่วไปบางอย่างจากวัตถุวันที่สามารถทำได้โดยสิ่งนี้
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
คุณอาจใช้datejsทำเช่นนั้น ตรวจสอบFormatSpecifiers , MMMM ให้ชื่อเดือนกับคุณ:
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
และ datejs ได้รับการแปลเป็นภาษาท้องถิ่นมานานกว่า 150 แห่ง! ดูที่นี่
ลอง:
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 ใน mozilla จำเป็นต้องมีการแก้ไขเนื่องจากจะส่งคืนทั้งวัน
toLocaleString
น่าเสียดายที่วิธีที่ดีที่สุดในการแยกชื่อเดือนนั้นมาจากการเป็นตัวแทน 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'
แทนที่จะประกาศอาร์เรย์ที่มีชื่อเดือนทั้งหมดแล้วชี้ไปที่ดัชนีเรายังสามารถเขียนมันในเวอร์ชั่นที่สั้นกว่าดังด้านล่าง:
var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug
MAY 1, 2015 AT 12:00:00 AM GMT-4
(เมื่อใช้{ month: "long" }
พารามิเตอร์)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
รูปแบบที่เป็นธรรมชาติในวันนี้คือการใช้ Moment.js
วิธีรับเดือนในรูปแบบสตริงนั้นง่ายมากใน Moment.js ไม่จำเป็นต้องเขียนโค้ดชื่อเดือนในรหัสของคุณอย่างหนัก: ในการรับเดือนและปีปัจจุบันในรูปแบบชื่อเดือนและปีเต็ม (พฤษภาคม 2558):
moment(new Date).format("MMMM YYYY");
Luxon
และdate-fns
แต่แล้วอีกครั้งมีการสนับสนุนเบราว์เซอร์กว้างสำหรับสากล API ในปัจจุบัน
อีกวิธีในการจัดรูปแบบวันที่
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
คุณสามารถใช้หนึ่งในหลายรูปแบบวันที่พร้อมใช้งาน เนื่องจากสิ่งนี้อยู่ในข้อกำหนดของ 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
หากคุณไม่ต้องการใช้ห้องสมุดภายนอกหรือเก็บชื่ออาร์เรย์ของเดือนหรือถ้า ECMAScript Internationalization API ไม่ดีพอเนื่องจากความเข้ากันได้ของเบราว์เซอร์คุณสามารถทำสิ่งที่ล้าสมัยโดยแยกข้อมูลจาก เอาท์พุทวันที่:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
สิ่งนี้จะให้ชื่อเดือนที่สั้นเช่นคุณเชื่อว่าวันที่จะมาในรูปแบบที่หลากหลายขึ้นอยู่กับการเริ่มต้นและที่ตั้งของคุณดังนั้นให้ดูที่toDateString()
ผลตอบแทนและคำนวณsubstring()
ค่าของคุณใหม่
หากคุณกำลังใช้ jQuery คุณอาจจะยังใช้ jQuery UI ซึ่งหมายความว่าคุณสามารถใช้$ .datepicker.formatDate ()
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
ทางออกที่ดีที่สุดของฉันมีดังนี้:
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;
ด้วยmomentjsเพียงใช้สัญกรณ์รูปแบบ
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
เป็นห้องสมุดที่มีขนาดใหญ่มาก ทางเลือกที่ทันสมัยรวมLuxon
และdate-fns
แต่แล้วอีกครั้งมีการสนับสนุนเบราว์เซอร์กว้างสำหรับสากล API ในปัจจุบัน
สิ่งนี้สามารถทำได้หากคุณใช้เคนโด้
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
คุณสามารถใช้ 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
หากคุณไม่ต้องการใช้ช่วงเวลาและต้องการแสดงชื่อเดือน -
.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;
}
};
}
สำหรับฉันนี่คือทางออกที่ดีที่สุดคือ
สำหรับ 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"]
เก็บชื่อไว้ในอาร์เรย์และค้นหาตามดัชนีของเดือน
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()]);
var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
ล่ะ สั้นกว่าการเพิ่มทีละส่วน ...
ฉันมีทางออกบางส่วนที่ฉันคิดขึ้นมา มันใช้การแสดงออกปกติเพื่อแยกชื่อเดือนและวัน แต่เมื่อฉันดูตัวเลือกภูมิภาคและภาษา (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(","));
}
เพียงขยายคำตอบที่ยอดเยี่ยมอื่น ๆ อีกมากมาย - ถ้าคุณใช้ 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 ทั่วโลก
ในการรับอาร์เรย์ชื่อเดือนให้ทำดังนี้
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
เพียงเขียนเสื้อคลุมเรียบง่ายรอบ ๆ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);