如何在Javascript中将日期前移到指定日期?
我正在处理一个窗体,需要自动计算表单提交时的格式('MMDDYYYY'),然后点击两个链接中的一个链接,计算出最接近的第一天即将到来的月份,以及接下来的最近的第15天。如何在Javascript中将日期前移到指定日期?
我已经创建了一个脚本,它将日期输出并将其输出到我需要格式的变量中,但我需要帮助计算前滚。
这里我想我需要的逻辑的例子:
如果当前日期是04092013,标有“未来一个月的首届”一个按下按钮的05012013变量值将被计算。
如果当前日期为04092013,则在一个按钮上标记为“月15日”,将计算变量值04152013。
如果当前日期为04162013或截至当月月底的任何日期,则在标有“月15日”的按钮上按下时,将计算变量值05152013。
看Date对象,它应该提供你所需要的:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
例如像这样关于你的第2个按钮:
$(function() {
var date = new Date(2013, 10, 24);
$("#date").html(date.toString());
$("#date1").html((new Date(date.getYear(), date.getMonth()+1, 1)).toString());
$("#date2").html((new Date(date.getYear(), date.getMonth()+1, 15)).toString());
});
(虽然我敢肯定如果您仔细查看日期文档,有更简单的方法来执行此操作)
谢谢。这是一个有用的链接。我会看看能否从那里收集一些知识。 – user2263830 2013-04-10 18:52:34
这工作。我只是应用了我已经编写的脚本来重新格式化日期对象的输出,并且我有我的答案。 – user2263830 2013-04-10 19:35:37
下面是一个示例。如果你想把它作为一个字符串,你必须根据需要在最后格式化它(使用UTC)。
如果您输入的日期与您要求的日期号码相同,则它会返回同一天,而不会向前移动一个月。
var date_string = '04092013';
// MMDDYYYY
function nextNthOfMonth(date_string, n) {
var date;
// n to Int, default 1
n = (+n || 1);
// date_string to ISO 8601
date_string = // "yyyy-MM-ddTHH:mm:ssZ"
date_string.slice(4)
+ '-' + date_string.slice(0, 2)
+ '-' + date_string.slice(2, 4)
+ 'T00:00:00Z';
// construct date object
date = new Date(date_string);
// fix to desired date
if (n < date.getUTCDate()) { // adjust for month if req.
date.setUTCMonth(date.getUTCMonth() + 1);
}
date.setUTCDate(n);
return date; // or format as desired
}
nextNthOfMonth(date_string, 1);
// Wed May 01 2013 01:00:00 GMT+0100 (GMT Daylight Time)
nextNthOfMonth(date_string, 15);
// Mon Apr 15 2013 01:00:00 GMT+0100 (GMT Daylight Time)
尝试
function getDate() {
var s = document.getElementById('date').value;
if(s){
return new Date(s.substring(4), parseInt(s.substring(2, 4), 10) - 1, s.substring(0, 2))
}
}
function comingDate(date, day){
date = new Date(date);
var cday = date.getDate();
date.setDate(day);
if(cday >= day){
date.setMonth(date.getMonth() + 1)
}
return date
}
function f15(){
var d = getDate();
var next = comingDate(d, 15);
console.log(next)
}
function f1(){
var d = getDate();
var next = comingDate(d, 1);
console.log(next)
}
演示:Fiddle
谢谢阿伦。我在jFiddle中给了这个尝试,它似乎不工作? – user2263830 2013-04-10 18:50:53
既然你知道你的日期格式,拆分输入部分:
var dateStr = '04092013'
var month = dateStr.substr(0,2);
var day = dateStr.substr(2,2);
var year = dateStr.substr(4,4);
将构建一个新的日期基础关于你想要设定的规则:
var newDate;
switch(rule)
{
case 'rule1':
newDate = new Date(year, month, 1);//first month is 0
break;
case 'rule2':
newDate = new Date(year, month, 15);//first month is 0
break;
}
- 注意检查当天是大于15
看一看在['Date'对象(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date),特别是['setDate'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setDate)和['setMonth']( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setMonth)方法.. – 2013-04-09 22:39:20