0

对于这种情况,我不想使用 jQuery 日期时间选择器。因为我制作移动应用程序。

[我的案例] 我正在使用 javascript 来获取今天日期和接下来几天的值。但我想要更灵活,并希望数据显示在 dilooping 上并使用 jquery 进入组合框。

直到今天,我使用以下方式获取数据:

function GetDay(){
     var today = new Date();
     var dd = today.getDate();
     var mm = today.getMonth()+1; //January is 0!
     var yyyy = today.getFullYear();
     if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} today = yyyy+'-'+mm+'-'+dd;
     alert(today);
}

Result : 2013-04-28

对我来说第二天使用:

function NextDay1(){
    var today = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
    var dd = today.getDate();
    var mm = today.getMonth()+1; //January is 0!
    var yyyy = today.getFullYear();
    if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} next1 = yyyy+'-'+mm+'-'+dd;
    alert(next1);
}

Result : 2013-04-29

我使用的方式非常手动,如果我想获取数据:

2013-04-28
2013-04-29
2013-04-30
2013-05-01
2013-05-02
ect...

我使用的方式非常手动,如果我想获取这样的数据并放置一个组合框来选择那个日期?

4

3 回答 3

2

我们在这里拥有:一个选择和匿名函数来填充它。是在Date()循环之外,所以它只被创建一次。填充现在是一个单独的功能。传递给匿名函数的数字是日期的总数,包括今天。小提琴

HTML:

<form id="someform">
    <select id="year"></select>
</form>

JS:

//did you spot the mistake here ? :) 10 is not bigger than 10 and we end with 010
//function pad(v) { return v > 10 ? v : "0" + v; }

//the right way
function pad(v) { return v < 10 ? "0" + v : v; }
(function (max) {
    var counter = 0,
        d = new Date(),
        myselect = document.getElementById("year");
    do {
        d.setDate(d.getDate() + 1);
        myselect.add(
            new Option (
                d.getFullYear() + "-" +
                pad(d.getMonth() + 1) + "-" +
                pad(d.getDate()), 
                counter++),
            null
        );
    } while (counter < max);
})(5);
于 2013-04-28T12:38:57.427 回答
2

您可以像这样在循环中获取日期:

// Create an empty array to store the dates generated
var myDates = [];

// Loop through for 5 times here
for (var i = 0; i < 5; i++) {
    var myDate = new Date();
    var fullDate = new Date(myDate.setDate(myDate.getDate() + i));
    var twoDigitMonth = ((fullDate.getMonth().length + 1) === 1) ? (fullDate.getMonth() + 1) : '0' + (fullDate.getMonth() + 1);
    var twoDigitDates = ('0' + fullDate.getDate()).slice(-2);
    var currentDate = fullDate.getFullYear() + "-" + twoDigitMonth + "-" + twoDigitDates;
    myDates.push(currentDate);
}

// Check the dates in console as an array
console.log(myDates);

然后插入到下拉列表中,例如:

// Loop through the date array we have created
$.each(myDates, function (index, item) {

    // Add options to the select list
    $('#mySelect').append($('<option>', {
        value: index,
        text: item
    }));
});
于 2013-04-28T12:13:03.687 回答
1

尝试这个-

var myDate = new Date();
var d = myDate.getFullYear() + '-' +  ('0' + (myDate.getMonth()+1)).slice(-2) + '-' + myDate.getDate();
var myDates = [d]; //initialize array with today's date already in it.

for (var i = 0; i < 5; i++) {        
    var fullDate = new Date(myDate.setDate(myDate.getDate() + 1)); //add 1 not i
    var twoDigitMonth = ('0' + (fullDate.getMonth() + 1)).slice(-2);
    var currentDate = fullDate.getFullYear() + "-" + twoDigitMonth + "-" + fullDate.getDate();
    myDates.push(currentDate);
}

console.log(myDates);

您接受的答案的问题是添加i会改变myDate,并且由于i不断增加for循环,您每次都会向日期添加不同的值。因此你得到-

["2013-04-28", "2013-04-29", "2013-05-1", "2013-05-4", "2013-05-8"]

日期每次增加一个不同的值。

使用我的代码,您将获得-

["2013-04-28", "2013-04-29", "2013-04-30", "2013-05-1", "2013-05-2", "2013-05-3"]
于 2013-04-28T13:11:18.217 回答