我知道有很多关于在javascript中找到一周中特定日期的日期的线程,但所有这些都以这样的格式给出:
Sun Dec 22 2013 16:39:49 GMT-0500 (EST)
但我希望以12/22/2013的格式 - MM / dd / yyyy 此外,我想要最近的星期天和我一直使用的代码不能一直工作。我认为在新月开始时它会搞砸了。
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));
}
我的代码为我提供了正确的格式,但它是当前日期:
var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
document.write(month + "/" + day + "/" + year)
打印:
>>> 12/23/2013
当我尝试从它不起作用的那天减去数字时,所以我无法得到最近的星期日的数据为MM / dd / yyyy
如何在不使用特殊图书馆的情况下获取MM / dd / yyyy最近星期日的日期?
答案 0 :(得分:4)
您可以使用.getDay
获取当前工作日,返回0(星期日)和6(星期六)之间的数字。所以你要做的就是从日期中减去这个数字:
currentTime.setDate(currentTime.getDate() - currentTime.getDay());
完整示例:
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
要将日期设置为任何其他上一个工作日,您必须计算明确减去的天数:
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));
}
要获取下周日的日期,您必须计算下周日的天数,即7 - currentTime.getDay()
。所以代码变成了:
currentTime.setDate(currentTime.getDate() + (7 - currentTime.getDay()));
答案 1 :(得分:2)
减去这样的日子
// 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);
答案 2 :(得分:2)
这是我的建议。创建一个这样的函数...以格式化您发送它的任何日期。
function formatDate(myDate) {
var tmp = myDate;
var month = tmp.getMonth() + 1;
var day = tmp.getDate();
var year = tmp.getFullYear();
return (month + "/" + day + "/" + year);
}
现在,要打印当前日期,您可以在此处使用此代码:
var today = new Date();
var todayFormatted = formatDate(today);
要获得上一个星期日,您可以使用while循环减去一天直到您点击星期日,就像这样...
var prevSunday = today;
while (prevSunday.getDay() !== 0) {
prevSunday.setDate(prevSunday.getDate()-1);
}
var sundayFormatted = formatDate(prevSunday);
要一起看整件事,请看看我创建的 DEMO ......
**注意:确保在查看演示时打开控制台选项卡。这样你就可以看到输出了。
答案 3 :(得分:1)
您可以在日期创建原型函数以执行您想要的操作:
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.com/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());
答案 4 :(得分:0)
这样的东西会起作用。这将创建一个可重用的dateHelper对象(您可能会添加日期帮助程序方法,因为您不希望使用现成的库)。获取日期,验证它是一个日期对象,然后通过减去现在和上一个星期日之间的毫秒数来计算上一个星期日。
底部的日志记录显示了未来100天的工作原理。
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));
}