วิธีรับวันแรกและวันสุดท้ายของสัปดาห์ใน JavaScript


97

ฉันมีtoday = new Date();วัตถุ ฉันต้องได้รับวันแรกและวันสุดท้ายของสัปดาห์ปัจจุบัน ฉันต้องการตัวแปรทั้งสองสำหรับวันอาทิตย์และวันจันทร์เป็นวันเริ่มต้นและวันสิ้นสุดของสัปดาห์ ตอนนี้ฉันสับสนเล็กน้อยกับรหัส คุณช่วยฉันได้ไหม

คำตอบ:


195
var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week
var last = first + 6; // last day is the first day + 6

var firstday = new Date(curr.setDate(first)).toUTCString();
var lastday = new Date(curr.setDate(last)).toUTCString();

firstday
"Sun, 06 Mar 2011 12:25:40 GMT"
lastday
"Sat, 12 Mar 2011 12:25:40 GMT"

ใช้ได้กับวันแรก = วันอาทิตย์ของสัปดาห์นี้และวันสุดท้าย = วันเสาร์สำหรับสัปดาห์นี้ การขยายให้ทำงานในวันจันทร์ถึงวันอาทิตย์เป็นเรื่องเล็กน้อย

การทำให้การทำงานกับวันแรกและวันสุดท้ายในเดือนที่ต่างกันถือเป็นการออกกำลังกายสำหรับผู้ใช้


ขอบคุณฉันจะทำสิ่งนี้ได้อย่างไร แต่เมื่อวันแรกคือวันจันทร์?
JuanPablo

4
var first = curr.getDate() - curr.getDay() +1;
JuanPablo

40
เพื่อให้ทำงานได้เมื่อคุณมีเดือนที่แตกต่างกัน -var lastday = new Date(curr.setDate(first.getDate()+6)).toUTCString();
Richard N

2
รหัสที่คล้ายกับคำตอบ @Rayons แต่จะใช้งานได้แม้ในเดือนและปีอื่น ๆ var curr = new Date('2014-10-01T00:00:00'); // get current date var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week var last = first + 6; // last day is the first day + 6 firstday = new Date(curr.setDate(first)).toUTCString(); lastday = new Date(curr.setDate(curr.getDate()+6)).toUTCString(); แต่ฉันได้แก้ไขรหัสของ @ RichardN ซึ่งมีข้อผิดพลาดเล็กน้อย
Azeez

65
"เป็นการออกกำลังกายสำหรับผู้ใช้" …จริงหรือ?
adius

63

โปรดใช้ความระมัดระวังกับคำตอบที่ยอมรับเนื่องจากไม่ได้ตั้งเวลาเป็น 00:00:00 และ 23:59:59 น. ดังนั้นคุณอาจมีปัญหาได้

คุณสามารถใช้ไลบรารีวันที่ของบุคคลที่สามเพื่อจัดการกับวันที่ ตัวอย่างเช่น:

var startOfWeek = moment().startOf('week').toDate();
var endOfWeek   = moment().endOf('week').toDate();

แก้ไข: ในเดือนกันยายน 2020 การใช้ Moment ไม่ได้รับการสนับสนุนสำหรับโครงการใหม่ ( โพสต์บล็อก )

อีกทางเลือกที่เป็นที่นิยมคือวันที่ FNS


20
หากคุณใช้โมเมนต์ให้ใช้ "isoweek" แทน "สัปดาห์" มิฉะนั้นจะเริ่มต้นสัปดาห์ตั้งแต่วันอาทิตย์และจะสิ้นสุดด้วยวันเสาร์ดังนั้น var startOfWeek = moment().startOf('isoweek').toDate(); var endOfWeek = moment().endOf('isoweek').toDate();
Brugolo

ขอบคุณพวกคุณช่วยฉัน :-)
Syed Ehtsham Abbas

1
หากต้องการคำนวณเวลาโดยไม่ใช้ moment.js ให้ใช้ Date.setHours: curr.setHours (0,0,0,0); lastday.setHours (23,59,59,59);
matadur

ต้องเป็น 'isoWeek' ไม่ใช่ 'isoweek'
Mayur Saner

Love moment js หนึ่งในวันที่ / เวลาที่ดีที่สุดที่นั่น!
Vippy

50

คุณยังสามารถใช้โค้ดบรรทัดต่อไปนี้เพื่อรับวันแรกและวันสุดท้ายของสัปดาห์:

var curr = new Date;
var firstday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var lastday = new Date(curr.setDate(curr.getDate() - curr.getDay()+6));

หวังว่าจะเป็นประโยชน์ ..


2
ใช่ แต่ @totymedii คำตอบของ Raynos ผิดสำหรับวันที่ 1 มีนาคม 2019 ฉันมีหลักฐานยืนยันวันแรก :: อา, 24 ก.พ. 2019 08:33:48 GMT วันสุดท้าย :: Sat, 02 Feb 2019 08:33:48 GMT
Deepak Patel

14

นี่เป็นวิธีที่รวดเร็วในการเริ่มต้นวันแรกและวันสุดท้ายสำหรับวันเริ่มต้น รู้ว่า:

1 วัน = 86,400,000 มิลลิวินาที

ค่าวันที่ JS อยู่ในหน่วยมิลลิวินาที

สูตรอาหาร: หาจำนวนวันที่คุณต้องลบเพื่อให้ได้วันเริ่มต้นสัปดาห์ของคุณ (คูณด้วยมิลลิวินาที 1 วัน) สิ่งที่เหลืออยู่หลังจากนั้นคือเพิ่ม 6 วันเพื่อรับวันสิ้นสุดของคุณ

var startDay = 1; //0=sunday, 1=monday etc.
var d = now.getDay(); //get the current day
var weekStart = new Date(now.valueOf() - (d<=0 ? 7-startDay:d-startDay)*86400000); //rewind to start day
var weekEnd = new Date(weekStart.valueOf() + 6*86400000); //add 6 days to get last day

3
สิ่งนี้ไม่ได้ผลเพราะวันไม่ได้ยาว 86,400,000 มิลลิวินาทีเสมอไปต้องขอบคุณ DST ...
ValarDohaeris

11

ไลบรารี date-fns ที่ยอดเยี่ยม (และไม่เปลี่ยนรูป) จัดการสิ่งนี้อย่างรัดกุมที่สุด:

const start = startOfWeek(date);
const end = endOfWeek(date);

วันเริ่มต้นเริ่มต้นของสัปดาห์คือวันอาทิตย์ (0) แต่สามารถเปลี่ยนเป็นวันจันทร์ (1) ได้ดังนี้:

const start = startOfWeek(date, {weekStartsOn: 1});
const end = endOfWeek(date, {weekStartsOn: 1});

1
บวก 1 สำหรับการใช้ date-fns ไม่ใช่ช่วงเวลา
CENT1PEDE

@RobG วิธีการใด ๆ ที่คุณใช้จะมีค่าเริ่มต้นวันแรกของสัปดาห์
Freewalker

4

คุณสามารถทำสิ่งนี้ได้

var today = new Date();
var startDay = 0; 
var weekStart = new Date(today.getDate() - (7 + today.getDay() - startDay) % 7);
var weekEnd = new Date(today.getDate() + (7 - today.getDay() - startDay) % 7);

ที่ไหนstartDayเป็นเลข 0-6 โดยที่ 0 ยืนวันอาทิตย์ (เช่น 1 = วันจันทร์ที่ 2 = วันอังคาร ฯลฯ )


3

SetDateจะกำหนดวันของเดือน การใช้setDateในช่วงเริ่มต้นและสิ้นเดือนจะส่งผลให้สัปดาห์ผิด

var curr = new Date("08-Jul-2014"); // get current date
var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week
var last = first + 6; // last day is the first day + 6
var firstday = new Date(curr.setDate(first)); // 06-Jul-2014
var lastday = new Date(curr.setDate(last)); //12-Jul-2014

หากคุณตั้งค่าวันที่คือ 01 ก.ค. 2557 วันแรกจะแสดงเป็น 29 มิ.ย. 2557 และวันสุดท้ายเป็น 05 มิ.ย. 2557 แทนที่จะเป็น 05 ก.ค. 2557

ดังนั้นเอาชนะปัญหานี้ฉันใช้

var curr = new Date();
day = curr.getDay();
firstday = new Date(curr.getTime() - 60*60*24* day*1000); //will return firstday (ie sunday) of the week
lastday = new Date(curr.getTime() + 60 * 60 *24 * 6 * 1000); //adding (60*60*6*24*1000) means adding six days to the firstday which results in lastday (saturday) of the week

" การใช้ setDate ในช่วงเริ่มต้นและสิ้นเดือนจะส่งผลให้เกิดสัปดาห์ที่ไม่ถูกต้อง" หากใช้ไม่ถูกต้อง
RobG

3

สิ่งนี้ใช้ได้กับการเปลี่ยนแปลงปีและเดือน

Date.prototype.GetFirstDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay())));
}

Date.prototype.GetLastDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay() +6)));
}

var today = new Date();

alert(today.GetFirstDayOfWeek());

alert(today.GetLastDayOfWeek());

ตอนนี้ดูเหมือนซ้ำซ้อน smh
Chris Lang

และสำหรับสัปดาห์เริ่มต้นในวันจันทร์?
RobG

@RobG โปรดอ้างอิงสิ่งนี้
SHIVA

2

ฉันแนะนำให้ใช้ Moment.js สำหรับกรณีดังกล่าว ฉันมีสถานการณ์ที่ฉันต้องตรวจสอบวันที่เวลาปัจจุบันสัปดาห์นี้เดือนนี้และวันที่ในไตรมาสนี้ คำตอบข้างต้นช่วยฉันได้ดังนั้นฉันจึงคิดที่จะแบ่งปันฟังก์ชันที่เหลือด้วย

เพียงเพื่อรับวันที่เวลาปัจจุบันในรูปแบบเฉพาะ

        case 'Today':
        moment().format("DD/MM/YYYY h:mm A");

        case 'This Week':
          moment().endOf('isoweek').format("DD/MM/YYYY h:mm A");

สัปดาห์เริ่มตั้งแต่วันอาทิตย์และสิ้นสุดในวันเสาร์หากเราใช้ 'สัปดาห์' เป็นพารามิเตอร์สำหรับฟังก์ชัน endOf แต่เพื่อให้วันอาทิตย์เป็นวันสิ้นสัปดาห์เราจำเป็นต้องใช้ 'isoweek'

        case 'This Month':
          moment().endOf('month').format("DD/MM/YYYY h:mm A");

        case 'This Quarter':
          moment().endOf('quarter').format("DD/MM/YYYY h:mm A");

ฉันเลือกรูปแบบนี้ตามความต้องการของฉัน คุณสามารถเปลี่ยนรูปแบบตามความต้องการของคุณ


ขณะนี้ Moment.js เป็นโครงการเดิมและจะไม่ได้รับการอัปเดตที่สำคัญเพิ่มเติม: github.com/moment/moment#project-status
Freewalker

2
        //get start of week; QT
    function _getStartOfWeek (date){
        var iDayOfWeek = date.getDay();
        var iDifference = date.getDate() - iDayOfWeek + (iDayOfWeek === 0 ?  -6:1);

        return new Date(date.setDate(iDifference));
    }, 

    function _getEndOfWeek(date){
        return new Date(date.setDate(date.getDate() + (7 - date.getDay()) === 7 ? 0 : (7 - date.getDay()) ));
    }, 

* วันที่ปัจจุบัน == 30.06.2016 และวันจันทร์เป็นวันแรกในสัปดาห์

นอกจากนี้ยังใช้งานได้ในเดือนและปีที่แตกต่างกัน ทดสอบด้วยชุด qunit:

ป้อนคำอธิบายภาพที่นี่

        QUnit.module("Planung: Start of week");
    QUnit.test("Should return start of week based on current date", function (assert) {
        var startOfWeek = Planung._getStartOfWeek(new Date());
        assert.ok( startOfWeek , "returned date: "+ startOfWeek);
    });

    QUnit.test("Should return start of week based on a sunday date", function (assert) {
        var startOfWeek = Planung._getStartOfWeek(new Date("2016-07-03"));
        assert.ok( startOfWeek , "returned date: "+ startOfWeek);
    });

    QUnit.test("Should return start of week based on a monday date", function (assert) {
        var startOfWeek = Planung._getStartOfWeek(new Date("2016-06-27"));
        assert.ok( startOfWeek , "returned date: "+ startOfWeek);
    });

    QUnit.module("Planung: End of week");
    QUnit.test("Should return end of week based on current date", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date());
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on sunday date with different month", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-07-03"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on monday date with different month", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-06-27"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on 01-06-2016 with different month", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-06-01"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on 21-06-2016 with different month", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-06-21"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on 28-12-2016 with different month and year", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-12-28"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });
    QUnit.test("Should return end of week based on 01-01-2016 with different month and year", function (assert) {
        var endOfWeek = Planung._getEndOfWeek(new Date("2016-01-01"));
        assert.ok( endOfWeek , "returned date: "+ endOfWeek);
    });

2
var dt = new Date()  //current date of week
var currentWeekDay = dt.getDay();
var lessDays = currentWeekDay == 0 ? 6 : currentWeekDay-1
var wkStart = new Date(new Date(dt).setDate(dt.getDate()- lessDays));
var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate()+6));

สิ่งนี้จะเป็นประโยชน์สำหรับสถานการณ์วันที่ใด ๆ


1

วิธีการของ krtek มีข้อผิดพลาดฉันทดสอบสิ่งนี้

var startDay = 0; 
var weekStart = new Date(today.getDate() - (7 + today.getDay() - startDay) % 7);
var weekEnd = new Date(today.getDate() + (6 - today.getDay() - startDay) % 7);

มันได้ผล


1

แม้ว่าคำถามจะดูล้าสมัย แต่ฉันก็ต้องชี้ให้เห็นปัญหา
คำถาม:จะเกิดอะไรขึ้นในวันที่ 1 มกราคม 2559?
ฉันคิดว่าวิธีแก้ปัญหาข้างต้นส่วนใหญ่คำนวณวันเริ่มต้นสัปดาห์ที่ 27.12.2016 ด้วยเหตุนี้ฉันจึงคิดว่าการคำนวณที่ถูกต้องควรเป็นดังนี้

var d = new Date(),
    dayInMs = 1000 * 60 * 60 * 24,
    weekInMs = dayInMs * 7,
    startOfToday = new Date(d.getFullYear(), d.getMonth(), d.getDate()).valueOf(),
    todayElapsedTime = d.valueOf() - startOfToday,
    dayDiff = d.getDay() * dayInMs,
    dateDiff = dayDiff + todayElapsedTime, 
    // finally
    startOfWeek = d.valueOf() - dateDiff,
    endOfWeek = startOfWeek + weekInMs - 1;

0

คำแนะนำที่ดี แต่คุณมีปัญหาเล็กน้อยในวันสุดท้าย คุณควรเปลี่ยนเป็น:

lastday = new Date(firstday.getTime() + 60 * 60 *24 * 6 * 1000);

ไม่ใช่ทุกวันที่มีความยาว 24 ชั่วโมงซึ่งจะสังเกตเห็นการออมแสง
RobG

0

วิธีการช่วงเวลาใช้ได้ผลสำหรับฉันในทุกกรณี (แม้ว่าฉันจะไม่ได้ทดสอบขอบเขตเช่นสิ้นปี, ปีอธิกสุรทิน) เฉพาะ Correction ในโค้ดด้านบนเท่านั้นที่พารามิเตอร์คือ "isoWeek" หากคุณต้องการเริ่มต้นสัปดาห์ตั้งแต่วันจันทร์

    let startOfWeek = moment().startOf("isoWeek").toDate();
    let endOfWeek = moment().endOf("isoWeek").toDate();

0

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

var weekday = [];
weekday[0] = "Sunday";
weekday[1] = "Monday";
weekday[2] = "Tuesday";
weekday[3] = "Wednesday";
weekday[4] = "Thursday";
weekday[5] = "Friday";
weekday[6] = "Saturday";

function getFirstDayOfWeek(date, from) {
    //Default start week from 'Sunday'. You can change it yourself.
    from = from || 'Sunday'; 
    var index = weekday.indexOf(from);
    var start = index >= 0 ? index : 0;

    var d = new Date(date);
    var day = d.getDay();
    var diff = d.getDate() - day + (start > day ? start - 7 : start);
    d.setDate(diff);
    return d;
};

วันสุดท้ายของสัปดาห์คือ 6 วันหลังจากวันแรกของสัปดาห์

function getLastDayOfWeek(date, from) {
    from = from || 'Sunday';
    var index = weekday.indexOf(from);
    var start = index >= 0 ? index : 0;

    var d = new Date(date);
    var day = d.getDay();
    var diff = d.getDate() - day + (start > day ? start - 1 : 6 + start);
    d.setDate(diff);
    return d;
};

ทดสอบ:

getFirstDayOfWeek('2017-10-16'); //--> Sun Oct 15 2017
getFirstDayOfWeek('2017-10-16', 'Monday'); //--> Mon Oct 16 2017
getFirstDayOfWeek('2017-10-16', 'Tuesday'); //--> Tue Oct 10 2017

0

JavaScript

function getWeekDays(curr, firstDay = 1 /* 0=Sun, 1=Mon, ... */) {
  var cd = curr.getDate() - curr.getDay();
  var from = new Date(curr.setDate(cd + firstDay));
  var to = new Date(curr.setDate(cd + 6 + firstDay));

  return {
    from,
    to,
  };
};

TypeScript

export enum WEEK_DAYS {
  Sunday = 0,
  Monday = 1,
  Tuesday = 2,
  Wednesday = 3,
  Thursday = 4,
  Friday = 5,
  Saturday = 6,
}

export const getWeekDays = (
  curr: Date,
  firstDay: WEEK_DAYS = WEEK_DAYS.Monday
): { from: Date; to: Date } => {
  const cd = curr.getDate() - curr.getDay();
  const from = new Date(curr.setDate(cd + firstDay));
  const to = new Date(curr.setDate(cd + 6 + firstDay));

  return {
    from,
    to,
  };
};

0

เราได้เพิ่มรหัส jquery ที่แสดงสัปดาห์ปัจจุบันของวันตั้งแต่วันจันทร์ถึงวันอาทิตย์

var d = new Date();
var week = [];
var _days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var _months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
for (let i = 1; i <= 7; i++) {
    let first = d.getDate() - d.getDay() + i; 
    let dt = new Date(d.setDate(first));
    var _day = _days[dt.getDay()];
     var _month = _months[dt.getMonth()];
     var _date = dt.getDate();
     if(_date < 10 ){
         _date = '0' +_date;
     }
     var _year = dt.getFullYear();
     var fulldate = _day+' '+_month+' '+_date+' '+_year+' ';
     week.push(fulldate);
  }
console.log(week);

รหัสนี้จัดเก็บวันของสัปดาห์ในอาร์เรย์ที่มีชื่อว่าสัปดาห์ รูปแบบของวันที่ที่จัดเก็บในอาร์เรย์คือวันจันทร์วันที่ปีหมายความว่าแสดงวันแรกของสัปดาห์จากนั้นเดือนวันที่และปี
Neeraj Singh

"รหัส jQuery" นี้เป็นอย่างไร? มีคำตอบที่ง่ายกว่ามากมายโดยใช้เทคนิคเดียวกัน
RobG

0

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

สำหรับstartOfและendOfสัปดาห์วันเริ่มต้นของสัปดาห์จะมีค่าเริ่มต้นเป็นวันอาทิตย์ (0) แต่วันใดก็ได้ (วันจันทร์ - 1 วันอังคาร - 2 ฯลฯ ) ใช้ปฏิทินเกรกอเรียนเท่านั้น

ฟังก์ชันจะไม่เปลี่ยนวันที่ต้นทางดังนั้นเพื่อดูว่าวันที่อยู่ในสัปดาห์เดียวกับวันอื่น ๆ หรือไม่ (สัปดาห์เริ่มต้นในวันจันทร์):

if (d >= startOf('week', d1, 1) && d <= endOf('week', d1, 1)) {
  // d is in same week as d1
}

หรือในสัปดาห์ปัจจุบันเริ่มในวันอาทิตย์:

if (d >= startOf('week') && d <= endOf('week')) {
  // d is in the current week
}

// Returns a new Date object set to start of given unit
// For start of week, accepts any day as start
function startOf(unit, date = new Date(), weekStartDay = 0) {
  // Copy original so don't modify it
  let d = new Date(date);
  let e = new Date(d);
  e.setHours(23,59,59,999);
  // Define methods
  let start = {
    second: d => d.setMilliseconds(0),
    minute: d => d.setSeconds(0,0),
    hour  : d => d.setMinutes(0,0,0),
    day   : d => d.setHours(0,0,0,0),
    week  : d => {
      start.day(d);
      d.setDate(d.getDate() - d.getDay() + weekStartDay);
      if (d > e) d.setDate(d.getDate() - 7);
    },
    month : d => {
      start.day(d);
      d.setDate(1);
    },
    year  : d => {
      start.day(d);
      d.setMonth(0, 1);
    },
    decade: d => {
      start.year(d);
      let year = d.getFullYear();
      d.setFullYear(year - year % 10);
    },
    century: d => {
      start.year(d);
      let year = d.getFullYear();
      d.setFullYear(year - year % 100);
    },
    millenium: d => {
      start.year(d);
      let year = d.getFullYear();
      d.setFullYear(year - year % 1000);
    }
  }
  start[unit](d);
  return d;
}

// Returns a new Date object set to end of given unit
// For end of week, accepts any day as start day
// Requires startOf
function endOf(unit, date = new Date(), weekStartDay = 0) {
  // Copy original so don't modify it
  let d = new Date(date);
  let e = new Date(date);
  e.setHours(23,59,59,999);
  // Define methods
  let end = {
    second: d => d.setMilliseconds(999),
    minute: d => d.setSeconds(59,999),
    hour  : d => d.setMinutes(59,59,999),
    day   : d => d.setHours(23,59,59,999),
    week  : w => {
      w = startOf('week', w, weekStartDay);
      w.setDate(w.getDate() + 6);
      end.day(w);
      d = w;
    },
    month : d => {
      d.setMonth(d.getMonth() + 1, 0);
      end.day(d);
    },  
    year  : d => {
      d.setMonth(11, 31);
      end.day(d);
    },
    decade: d => {
      end.year(d);
      let y = d.getFullYear();
      d.setFullYear(y - y % 10 + 9);
    },
    century: d => {
      end.year(d);
      let y = d.getFullYear();
      d.setFullYear(y - y % 100 + 99);
    },
    millenium: d => {
      end.year(d);
      let y = d.getFullYear();
      d.setFullYear(y - y % 1000 + 999);
    }
  }
  end[unit](d);
  return d;
}

// Examples
let d = new Date();

['second','minute','hour','day','week','month','year',
 'decade','century','millenium'].forEach(unit => {
   console.log(('Start of ' + unit).padEnd(18)  + ': ' +
   startOf(unit, d).toString());
   console.log(('End of ' + unit).padEnd(18)  + ': ' +
   endOf(unit, d).toString());
});


0

เปลี่ยนคำตอบ @Chris Lang เล็กน้อย หากคุณต้องการให้วันจันทร์เป็นวันแรกให้ใช้สิ่งนี้

Date.prototype.GetFirstDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay()+ (this.getDay() == 0 ? -6:1) )));
}
Date.prototype.GetLastDayOfWeek = function() {
    return (new Date(this.setDate(this.getDate() - this.getDay() +7)));
}

var today = new Date();

alert(today.GetFirstDayOfWeek());

alert(today.GetLastDayOfWeek());

ทักษ @ คริสหลัง


0

function getMonday(d) {
    d = new Date(d);
    var day = d.getDay(),
        diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
    return new Date(d.setDate(diff));
  }
  
 console.log( getMonday(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate())) )  // Mon Nov 08 2010

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