Saya memiliki today = new Date();
objek. Saya harus mendapatkan hari pertama dan terakhir dari minggu ini. Saya membutuhkan kedua varian untuk hari Minggu dan Senin sebagai hari awal dan akhir dalam seminggu. Saya agak bingung sekarang dengan kode. Bisakah Anda membantu saya?
javascript
date
Petya petrov
sumber
sumber
var first = curr.getDate() - curr.getDay() +1;
var lastday = new Date(curr.setDate(first.getDate()+6)).toUTCString();
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();
hanya saja saya telah mengoreksi kode @ RichardN, yang mengalami kesalahan kecilHati-hati dengan jawaban yang diterima, ini tidak mengatur waktu ke 00:00:00 dan 23:59:59, jadi Anda bisa mendapat masalah.
Anda dapat menggunakan perpustakaan tanggal pihak ketiga untuk menangani tanggal. Sebagai contoh:
var startOfWeek = moment().startOf('week').toDate(); var endOfWeek = moment().endOf('week').toDate();
Alternatif populer lainnya adalah date-fns .
sumber
var startOfWeek = moment().startOf('isoweek').toDate();
var endOfWeek = moment().endOf('isoweek').toDate();
Anda juga dapat menggunakan baris kode berikut untuk mendapatkan tanggal pertama dan terakhir dalam seminggu:
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));
Semoga bermanfaat ..
sumber
Berikut cara cepat untuk mendapatkan hari pertama dan terakhir, untuk hari awal apa pun. mengetahui bahwa:
1 hari = 86.400.000 milidetik.
Nilai tanggal JS dalam milidetik
Resep: cari tahu berapa hari yang perlu Anda hapus untuk mendapatkan hari awal minggu Anda (kalikan dengan 1 hari dalam milidetik). Semua yang tersisa setelah itu adalah menambahkan 6 hari untuk mendapatkan hari akhir Anda.
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
sumber
Library date-fns yang sangat baik (dan tidak dapat diubah) menangani ini dengan paling singkat:
const start = startOfWeek(date); const end = endOfWeek(date);
Hari awal default dalam seminggu adalah Minggu (0), tetapi dapat diubah menjadi Senin (1) seperti ini:
const start = startOfWeek(date, {weekStartsOn: 1}); const end = endOfWeek(date, {weekStartsOn: 1});
sumber
Anda bisa melakukan sesuatu seperti ini
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);
Dimana
startDay
adalah angka dari 0 sampai 6 dimana 0 berarti Minggu (yaitu 1 = Senin, 2 = Selasa, dll).sumber
SetDate
akan menetapkan hari dalam sebulan. MenggunakansetDate
selama awal dan akhir bulan, akan menghasilkan minggu yang salahvar 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
Jika Anda menyetel Tanggal adalah 01-Jul-2014, maka hari pertama akan ditampilkan sebagai 29-Jun-2014 dan hari terakhir sebagai 05-Jun-2014 bukannya 05-Jul-2014
Jadi atasi masalah ini yang saya gunakan
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
sumber
Ini bekerja sepanjang tahun dan perubahan bulan.
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());
sumber
Saya merekomendasikan untuk menggunakan Moment.js untuk kasus seperti itu. Saya punya skenario di mana saya harus memeriksa waktu tanggal saat ini, minggu ini, bulan ini dan waktu tanggal kuartal ini. Di atas jawaban membantu saya jadi saya berpikir untuk berbagi fungsi lainnya juga.
Cukup untuk mendapatkan waktu tanggal saat ini dalam format tertentu
case 'Today': moment().format("DD/MM/YYYY h:mm A"); case 'This Week': moment().endOf('isoweek').format("DD/MM/YYYY h:mm A");
Minggu dimulai dari hari Minggu dan berakhir pada hari Sabtu jika kita hanya menggunakan 'minggu' sebagai parameter untuk fungsi endOf tetapi untuk mendapatkan hari Minggu sebagai akhir minggu kita perlu menggunakan 'minggu 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");
Saya memilih format ini sesuai kebutuhan saya. Anda dapat mengubah format sesuai kebutuhan Anda.
sumber
//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()) )); },
* tanggal saat ini == 30.06.2016 dan senin adalah hari pertama dalam seminggu.
Ia juga bekerja untuk bulan dan tahun yang berbeda. Diuji dengan suite 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); });
sumber
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));
Ini akan berguna untuk skenario tanggal apa pun.
sumber
Metode krtek ada yang salah, saya menguji ini
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);
berhasil
sumber
Meskipun pertanyaan itu tampak usang, saya harus menunjukkan sebuah masalah.
Pertanyaan: Apa yang akan terjadi pada 1 Januari 2016?
Saya pikir sebagian besar solusi di atas menghitung awal minggu sebagai 27.12.2016. Untuk alasan ini menurut saya, perhitungan yang benar harus seperti di bawah ini;
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;
sumber
Saran bagus tetapi Anda mendapat masalah kecil di hari terakhir. Anda harus mengubahnya menjadi:
lastday = new Date(firstday.getTime() + 60 * 60 *24 * 6 * 1000);
sumber
Pendekatan saat bekerja untuk saya untuk semua kasus (meskipun saya belum menguji batas-batas seperti akhir tahun, tahun kabisat). Hanya Koreksi pada kode di atas yang parameternya adalah "isoWeek", jika Anda ingin memulai minggu dari hari Senin.
let startOfWeek = moment().startOf("isoWeek").toDate(); let endOfWeek = moment().endOf("isoWeek").toDate();
sumber
Hanya dengan menggunakan javascript murni, Anda dapat menggunakan fungsi di bawah ini untuk mendapatkan hari pertama dan hari terakhir dalam seminggu dengan bebas mengatur hari untuk awal minggu.
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; };
Hari terakhir dalam seminggu hanya 6 hari setelah hari pertama dalam seminggu
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; };
Uji:
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
sumber
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, }; };
sumber
Kami telah menambahkan kode jquery yang menunjukkan minggu hari ini dari hari senin hingga minggu.
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);
sumber
Pertanyaan lama dengan banyak jawaban, jadi pertanyaan lain tidak akan menjadi masalah. Beberapa fungsi umum untuk memulai dan mengakhiri semua jenis satuan waktu.
Untuk startOf dan endOf week, hari awal dalam seminggu ditetapkan secara default ke Sunday (0) tetapi hari apa pun bisa dilewati (Senin - 1, Selasa - 2, dll.). Hanya menggunakan kalender Gregorian.
Fungsi tidak mengubah tanggal sumber, jadi untuk melihat apakah tanggal berada di minggu yang sama dengan tanggal lainnya (minggu dimulai pada hari Senin):
if (d >= startOf('week', d1, 1) && d <= endOf('week', d1, 1)) { // d is in same week as d1 }
atau di minggu ini mulai hari Minggu:
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()); });
sumber
Perubahan kecil untuk jawaban @Chris Lang. Jika Anda ingin hari Senin sebagai hari pertama gunakan ini.
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());
Thaks @rislang
sumber
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
sumber