2009-10-16 49 views
12

Làm cách nào để trả lại ngày của một ngày trong tuần nhất định (có thể là số 0-6 hoặc tên Chủ Nhật-Thứ Bảy).Nhận ngày tiếp theo từ ngày trong tuần trong JavaScript

Ví dụ, nếu hôm nay, trên Thứ sáu 16-Oct-2009 tôi thông qua vào:

  • thứ sáu, nó sẽ quay trở lại ngày hôm nay 16-Oct-2009
  • thứ bảy trả về 17 tháng 10 năm 2009
  • Thứ năm trả về 22-Oct-2009
+5

Đây không phải là bộ mã cho thuê - bạn không được yêu cầu mọi người làm một số công việc cho bạn. Vui lòng lặp lại bài đăng của bạn dưới dạng câu hỏi. –

+0

Tôi cần một triệu đô la. Nhưng tôi không đến đây để yêu cầu. –

+0

@Andy E Tại sao bạn không bỏ phiếu cho câu hỏi này? Tôi bị bệnh và mệt mỏi của người sử dụng trong cộng đồng này bỏ qua để bỏ phiếu xuống chỉ vì họ mất một điểm. Tôi sẽ không bao giờ đến đây nếu đó là -1! –

Trả lời

22

Chỉ cần thêm 7 không giải quyết được sự cố.

Chức năng dưới đây sẽ cung cấp cho bạn vào ngày tiếp theo trong tuần.

function nextDay(x){ 
    var now = new Date();  
    now.setDate(now.getDate() + (x+(7-now.getDay())) % 7); 
    return now; 
} 
+2

Đối với những người tò mò, đây là cách thức hoạt động: Mã nhận được ngày hiện tại của tháng (1-31) và thêm sự khác biệt giữa ngày hôm nay trong tuần (0-6) và ngày mong muốn trong tuần (0-6), sau đó sử dụng mod để đảm bảo giá trị mới không lớn hơn 6. – Polyducks

3

Mở rộng trên user 190106 's answer, mã này sẽ cho bạn những gì bạn muốn:

function getNextDay(day, resetTime){ 
    var days = { 
    sunday: 0, monday: 1, tuesday: 2, 
    wednesday: 3, thursday: 4, friday: 5, saturday: 6 
    }; 

    var dayIndex = days[day.toLowerCase()]; 
    if (!dayIndex) { 
    throw new Error('"' + day + '" is not a valid input.'); 
    } 

    var returnDate = new Date(); 
    var returnDay = returnDate.getDay(); 
    if (dayIndex !== returnDay) { 
    returnDate.setDate(returnDate.getDate() + (dayIndex + (7 - returnDay)) % 7); 
    } 

    if (resetTime) { 
    returnDate.setHours(0); 
    returnDate.setMinutes(0); 
    returnDate.setSeconds(0); 
    returnDate.setMilliseconds(0); 
    } 
    return returnDate; 
} 

alert(getNextDay('thursday', true)); 
13

Dưới đây là một phiên bản sửa đổi một chút cho câu trả lời của Tim để giải quyết cụ thể question-- vượt qua trong một ngày d, và, và một ngày mong muốn của tuần (dow 0-6), trở về ngày

function nextDay(d, dow){ 
    d.setDate(d.getDate() + (dow+(7-d.getDay())) % 7); 
    return d; 
} 
+2

Hoạt động như một sự quyến rũ. Fiddle: https://jsfiddle.net/pomqt31x/3/ – Patito

+0

Đối với những người cần nhận được một ngày trong tuần sau đó, hoặc tuần sau đó: thêm một đối số tuần 'function nextWeekDay (d, dow, w)' và sau đó thêm tuần vào phép tính và loại bỏ mô đun: 'returnDate.setDate (d.getDate() + (dow + ((w * 7) -d.getDay())));' – stackingjasoncooper

3

Dưới đây là một giải pháp đơn giản

//takes dayIndex from sunday(0) to saturday(6) 
 
function nextDate(dayIndex) { 
 
    var today = new Date(); 
 
    today.setDate(today.getDate() + (dayIndex - 1 - today.getDay() + 7) % 7 + 1); 
 
    return today; 
 
} 
 
document.write("Next Sunday is: "+nextDate(0).toLocaleString()+"<br/>"); 
 
document.write("Next Thursday is: "+nextDate(4).toLocaleString()+"<br/>"); 
 
document.write("Next Saturday is: "+nextDate(6).toLocaleString());

0

Và nếu bạn không muốn làm vượt qua con số nhưng tuần-tên (Chủ Nhật - Thứ bảy) để tìm một ngày trong tương lai của một ngày trong tuần nhất định, thì đây sẽ giúp bạn cũng như:

function getDateOfWeekday(refday){ 
 
    var days = { 
 
     monday: 1, 
 
     tuesday: 2, 
 
     wednesday: 3, 
 
     thursday: 4, 
 
     friday: 5, 
 
     saturday: 6, 
 
     sunday: 0 
 
    }; 
 
    if(!days.hasOwnProperty(refday))throw new Error(refday+" is not listed in "+JSON.stringify(days)); 
 
    var currDate = new Date(); 
 
    var currTimestamp = currDate.getTime(); 
 
    var triggerDay = days[refday]; 
 
    var dayMillDiff=0; 
 
    var dayInMill = 1000*60*60*24; 
 
    // add a day to dayMillDiff as long as the desired refday (sunday for instance) is not reached 
 
    while(currDate.getDay()!=triggerDay){ 
 
     dayMillDiff += dayInMill; 
 
     currDate = new Date(currDate.getTime()+dayInMill); 
 
    } 
 
    return new Date(currTimestamp + dayMillDiff); 
 
} 
 

 
var sunday = getDateOfWeekday("sunday"); 
 
document.write("Next Sunday is at: <strong>"+sunday.toLocaleString()+"</strong><br/>"); 
 

 
var thursday = getDateOfWeekday("thursday"); 
 
thursday.setHours(0,0,0,0); // set hours/minutes/seconds and millseconds to zero 
 
document.write("Next Thursday is at: <strong>"+thursday.toLocaleString()+"</strong> on midnight<br/>"); 
 

 
var tuesday = getDateOfWeekday("tuesday"); 
 
document.write("Next Tuesday is at: <strong>"+tuesday.toLocaleString()+"</strong><br/>");

Các vấn đề liên quan