วิธีรับวันในสัปดาห์และเดือนของปี?


124

ฉันไม่รู้เกี่ยวกับ Javascript มากนักและคำถามอื่น ๆ ที่ฉันพบเกี่ยวข้องกับการดำเนินการในวันที่ไม่เพียง แต่ได้รับข้อมูลตามที่ฉันต้องการเท่านั้น

วัตถุประสงค์

ฉันต้องการรับวันที่ตามรูปแบบด้านล่าง:

พิมพ์เมื่อวันพฤหัสบดีที่ 27 มกราคม 2554 เวลา 17:42:21 น

จนถึงตอนนี้ฉันได้รับสิ่งต่อไปนี้:

var now = new Date();
var h = now.getHours();
var m = now.getMinutes();
var s = now.getSeconds();

h = checkTime(h);
m = checkTime(m);
s = checkTime(s);

var prnDt = "Printed on Thursday, " + now.getDate() + " January " + now.getFullYear() + " at " + h + ":" + m + ":" s;

ตอนนี้ฉันต้องการทราบวิธีรับวันในสัปดาห์และเดือนของปี (ชื่อ)

มีวิธีง่ายๆในการสร้างหรือฉันจะพิจารณาใช้อาร์เรย์ที่ฉันจะทำดัชนีให้ถูกต้องโดยใช้now.getMonth()และnow.getDay()?

คำตอบ:


233

ใช่คุณจะต้องมีอาร์เรย์

var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

var day = days[ now.getDay() ];
var month = months[ now.getMonth() ];

หรือคุณสามารถใช้ไลบรารีdate.js


แก้ไข:

หากคุณจะใช้สิ่งเหล่านี้บ่อยๆคุณอาจต้องการขยายDate.prototypeเพื่อการเข้าถึง

(function() {
    var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];

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

    Date.prototype.getMonthName = function() {
        return months[ this.getMonth() ];
    };
    Date.prototype.getDayName = function() {
        return days[ this.getDay() ];
    };
})();

var now = new Date();

var day = now.getDayName();
var month = now.getMonthName();

2
@ วิลล์: ยินดีต้อนรับ FYI หากคุณกำลังจะทำสิ่งนี้บ่อยๆคุณสามารถสร้างต้นแบบฟังก์ชันการทำงานลงในDateวัตถุได้อย่างง่ายดาย ฉันจะอัปเดตในอีกสักครู่
user113716

3
แปลข้อมูลของคุณให้เข้ากับท้องถิ่นและไม่จำเป็นต้องมีอาร์เรย์ภาษาเดียวเท่านั้น! selectedLocale = 'en-us'; selectedDate.toLocaleString (selectedLocale, {month: "long"});
Ryan Loggerythm

ตอนนี้ฉันทำไปแล้ว แต่ต้องใช้ Monday เป็นองค์ประกอบแรกในอาร์เรย์ไม่ใช่วันอาทิตย์ ยังคงใช้งานได้ดี
nrowegt

4
ไม่ไม่ไม่ไม่. เพียงใช้คลาสวันที่ของจาวาสคริปต์มาตรฐาน ไม่จำเป็นต้องมีอาร์เรย์หรือไลบรารีเพิ่มเติม ดูคำตอบของฉัน: stackoverflow.com/a/50293232/760777
RWC

52

ใช้คลาสวันที่ของจาวาสคริปต์มาตรฐาน ไม่จำเป็นต้องมีอาร์เรย์ ไม่จำเป็นต้องมีห้องสมุดเพิ่มเติม

ดูhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

var options = {  weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false };
var prnDt = 'Printed on ' + new Date().toLocaleTimeString('en-us', options);

console.log(prnDt);


@RWC นี่ดี แต่ฉันจะจัดการให้ได้เฉพาะวันธรรมดาโดยไม่มีส่วนวันที่เหลือได้อย่างไร IE ฉันต้องการsaturdayแทนsaturday, 9th february 2019.
Vladimir Nul

4
@Valdimir Nul: var prnDt = 'พิมพ์เมื่อ' + วันที่ใหม่ (). toLocaleDateString ('en-us', {วันธรรมดา: 'ยาว'}); console.log (prnDt);
RWC

วิธีที่ดีที่สุดแน่นอน
Diego Victor de Jesus

@Vladimir มีปัญหากับ Firefox เวลาจะแสดงเสมอแล้ว:new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
Bruno L.

8

สิ่งหนึ่งที่คุณสามารถทำได้คือขยายวันที่วัตถุเพื่อส่งคืนวันธรรมดาโดย:

Date.prototype.getWeekDay = function() {
    var weekday = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    return weekday[this.getDay()];
}

ดังนั้นคุณสามารถโทรได้เฉพาะ date.getWeekDay ();


7

ตามที่ @ L-Rayได้แนะนำไปแล้วคุณสามารถดูmoment.js ได้เช่นกัน

ตัวอย่าง

var today = moment();
var result = {
  day: today.format("dddd"),
  month: today.format("MMM")
}

document.write("<pre>" + JSON.stringify(result,0,4) + "</pre>");
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>


5

น่าเสียดายที่Dateobject ใน javascript ส่งคืนข้อมูลเกี่ยวกับเดือนในรูปแบบตัวเลขเท่านั้น สิ่งที่เร็วกว่าที่คุณทำได้คือสร้างอาร์เรย์ของเดือน (ไม่ควรเปลี่ยนบ่อย!) และสร้างฟังก์ชันที่ส่งคืนชื่อตามจำนวน

สิ่งนี้:

function getMonthNameByMonthNumber(mm) { 
   var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 

   return months[mm]; 
}

รหัสของคุณจึงกลายเป็น:

var prnDt = "Printed on Thursday, " + now.getDate() + " " + getMonthNameByMonthNumber(now.getMonth) + " "+  now.getFullYear() + " at " + h + ":" + m + ":" s;

5
var GetWeekDays = function (format) {
    var weekDays = {};

    var curDate = new Date();
    for (var i = 0; i < 7; ++i) {
        weekDays[curDate.getDay()] = curDate.toLocaleDateString('ru-RU', {
            weekday: format ? format : 'short'
        });

        curDate.setDate(curDate.getDate() + 1);
    }

    return weekDays;
};

me.GetMonthNames = function (format) {
    var monthNames = {};

    var curDate = new Date();
    for (var i = 0; i < 12; ++i) {
        monthNames[curDate.getMonth()] = curDate.toLocaleDateString('ru-RU', {
            month: format ? format : 'long'
        });

        curDate.setMonth(curDate.getMonth() + 1);
    }

    return monthNames;
};

ru-RU จะเป็น en-US (สำหรับภาษาอังกฤษแบบอเมริกัน) หรือ en-GB (สำหรับ British English)
Sarah


3

จากhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

toLocaleDateString ()วิธีการส่งกลับสตริงด้วยภาษาที่เป็นตัวแทนที่มีความละเอียดอ่อนของส่วนวันที่วันนี้ อาร์กิวเมนต์โลแคลและอ็อพชันใหม่ช่วยให้แอ็พพลิเคชันระบุภาษาที่ควรใช้รูปแบบการจัดรูปแบบและอนุญาตให้ปรับแต่งลักษณะการทำงานของฟังก์ชัน ในการใช้งานรุ่นเก่าซึ่งไม่สนใจอาร์กิวเมนต์โลแคลและอ็อพชันโลแคลที่ใช้และรูปแบบของสตริงที่ส่งคืนจะขึ้นอยู่กับการนำไปใช้ทั้งหมด

แบบยาว:

const options = { weekday: 'long' };
const date = new Date();
console.log(date.toLocaleDateString('en-US', options));

หนึ่งในสายการบิน:

console.log(new Date().toLocaleDateString('en-US', { weekday: 'long' }));

หมายเหตุ: มีตัวเลือกภาษาอื่น ๆ สำหรับโลแคล แต่ตัวเลือกที่นำเสนอที่นี่สำหรับภาษาอังกฤษแบบสหรัฐอเมริกา


2

คุณสามารถดูdatejsซึ่งแยกวิเคราะห์ผลลัพธ์วันที่ที่แปลเป็นภาษาท้องถิ่นเช่น

การจัดรูปแบบอาจมีลักษณะเช่นนี้ในตัวอย่างของคุณ:

new Date().toString('dddd, d MMMM yyyy at HH:mm:ss') 

1

ง่ายมาก คุณสามารถตั้งค่าตัวเลือกให้แสดงเฉพาะวันสัปดาห์ใน toLocaleDateString () เพื่อรับชื่อ ตัวอย่างเช่น:

(วันที่ใหม่ ()) toLocaleDateString ('en-US', {วันธรรมดา: 'long'}) จะส่งคืนเฉพาะวันในสัปดาห์ และ (new Date ()). toLocaleDateString ('en-US', {month: 'long'}) จะส่งคืนเฉพาะเดือนของปี


0
  function currentDate() {
      var monthNames = [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE",
                     "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ];
      var days = ['SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY'];                       
      var today = new Date();
      var dd   = today.getDate();
      var mm   = monthNames[today.getMonth()]; 
      var yyyy = today.getFullYear();
      var day  = days[today.getDay()];
      today = 'Date is :' + dd + '-' + mm + '-' + yyyy;
      document.write(today +"<br>");
      document.write('Day is : ' + day );
  }
  currentDate();

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