javascript date of specific day of the week in MMddyyyy format not libraries - Stack Overflow

admin2025-04-04  1

I know there are a lot of threads about finding the date of a specific day of the week in javascript but the all give it in the format like so:

Sun Dec 22 2013 16:39:49 GMT-0500 (EST)

but I would like it in this format 12/22/2013 -- MM/dd/yyyy Also I want the most recent Sunday and the code I have been using does not work all the time. I think during the start of a new month it screws up.

function getMonday(d) {
d = new Date(d);
var day = d.getDay(),
    diff = d.getDate() - day + (day == 0 ? -6:0); // adjust when day is sunday
return new Date(d.setDate(diff));
}

I have code that gives me the correct format but that is of the current date:

var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
document.write(month + "/" + day + "/" + year)

this prints:

>>> 12/23/2013

when I try to subtract numbers from the day it does not work, so I cannot get the dat of the most recent Sunday as MM/dd/yyyy

How do I get the date of the most recent sunday in MM/dd/yyyy to print, without using special libraries?

I know there are a lot of threads about finding the date of a specific day of the week in javascript but the all give it in the format like so:

Sun Dec 22 2013 16:39:49 GMT-0500 (EST)

but I would like it in this format 12/22/2013 -- MM/dd/yyyy Also I want the most recent Sunday and the code I have been using does not work all the time. I think during the start of a new month it screws up.

function getMonday(d) {
d = new Date(d);
var day = d.getDay(),
    diff = d.getDate() - day + (day == 0 ? -6:0); // adjust when day is sunday
return new Date(d.setDate(diff));
}

I have code that gives me the correct format but that is of the current date:

var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
document.write(month + "/" + day + "/" + year)

this prints:

>>> 12/23/2013

when I try to subtract numbers from the day it does not work, so I cannot get the dat of the most recent Sunday as MM/dd/yyyy

How do I get the date of the most recent sunday in MM/dd/yyyy to print, without using special libraries?

Share Improve this question asked Dec 23, 2013 at 21:48 user2330624user2330624 3001 gold badge7 silver badges17 bronze badges
Add a ment  | 

5 Answers 5

Reset to default 4

You can get the current weekday with .getDay, which returns a number between 0 (Sunday) and 6 (Saturday). So all you have to do is subtract that number from the date:

currentTime.setDate(currentTime.getDate() - currentTime.getDay());

Complete example:

var currentTime = new Date()
currentTime.setDate(currentTime.getDate() - currentTime.getDay());
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
console.log(month + "/" + day + "/" + year)
// 12/22/2013 

To set the date to any other previous weekday, you have to pute the number of days to subtract explicitly:

function setToPreviousWeekday(date, weekday) {
    var current_weekday = date.getDay();
    // >= always gives you the previous day of the week
    // > gives you the previous day of the week unless the current is that day
    if (current_weekday >= weekday) {
        current_weekday += 6;
    }
    date.setDate(date.getDate() - (current_weekday - weekday));
}

To get the date of next Sunday you have to pute the number of days to the next Sunday, which is 7 - currentTime.getDay(). So the code bees:

currentTime.setDate(currentTime.getDate() + (7 -  currentTime.getDay()));

Subtract days like this

// calculate days to subtract as per your need
var dateOffset = (24*60*60*1000) * 5; //5 days
var date = new Date();
date.setTime(date.getTime() - dateOffset);

var day = date.getDate() // prints 19
var month = date.getMonth() + 1
var year = date.getFullYear()
document.write(month + '/' + day + '/' + year);

Here is my suggestion. Create a function like so... in order to format any date you send it.

function formatDate(myDate) {
var tmp = myDate;
var month = tmp.getMonth() + 1;
var day = tmp.getDate();
var year = tmp.getFullYear();
return (month + "/" + day + "/" + year);
}

Now, to print the current date, you can use this code here:

   var today = new Date();
   var todayFormatted = formatDate(today);

To get the previous Sunday, you can use a while loop to subtract a day until you hit a Sunday, like this...

  var prevSunday = today;
  while (prevSunday.getDay() !== 0) {
    prevSunday.setDate(prevSunday.getDate()-1);
  }

  var sundayFormatted = formatDate(prevSunday);

To see the whole thing together, take a look at this DEMO I've created...

** Note: Make sure you turn on the Console tab when viewing the demo. This way you can see the output.

You can create prototype functions on Date to do what you want:

    Date.prototype.addDays = function (days) {
        var d = new Date(this.valueOf());
        d.setDate(d.getDate() + days);
        return d;
    }

    Date.prototype.getMostRecentPastSunday = function () {
        var d = new Date(this.valueOf());
        return d.addDays(-d.getDay()); //Sunday is zero
    }

    Date.prototype.formatDate = function () {
        var d = new Date(this.valueOf());
        //format as you see fit
        //http://www.webdevelopersnotes./tips/html/10_ways_to_format_time_and_date_using_javascript.php3
        //using your approach...
        var month = d.getMonth() + 1
        var day = d.getDate()
        var year = d.getFullYear()
        return month + "/" + day + "/" + year;
    }

    console.log((new Date()).getMostRecentPastSunday().formatDate());
    console.log((new Date("1/3/2014")).getMostRecentPastSunday().formatDate());

    //or...
    var d = new Date(); //whatever date you want...
    console.log(d.getMostRecentPastSunday().formatDate());

Something like this will work. This creates a reusable dateHelper object (you will presumably be adding date helper methods since you don't want to use a library off the shelf). Takes in a date, validates that it is a date object, then calculates the previous Sunday by subtracting the number of millis between now and the previous Sunday.

The logging at the bottom shows you how this works for 100 days into the future.

var dateHelper = {
    getPreviousSunday: function (date) {
        var millisInADay = 86400000;
        if (!date.getDate()) {
            console.log("not a date: " + date);
            return null;
        }
        date.setMilliseconds(date.getMilliseconds() - date.getDay() * millisInADay);
        return date.getMonth() + 1 + "/" + date.getDate() + "/" + date.getFullYear();
   }
}

var newDate = new Date();
console.log(dateHelper.getPreviousSunday(newDate));
var now = newDate.getTime();
for (var i=1; i<100; i++) {
    var nextDate = new Date(now + i * 86400000);
    console.log("Date: + " nextDate + " - previous sunday: " + dateHelper.getPreviousSunday(nextDate));
}
转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1743711162a216110.html

最新回复(0)