Javascript日期修改

时间:2015-04-05 13:54:06

标签: javascript function date


我写了这两个javascript函数:

function getDateFromDateAtHourOfDay(date, hour)
{
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();

    var newDate = new Date(year, month, day, hour, 0, 0);

    return (newDate);
}

function getDateDescriptionFromDate(date)
{
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();

    return ( (day < 10 ? ("0" + day) : (day)) + "." + (month < 10 ? ("0" + month) : (month)) + "." + year); 
}

第一个应该返回同一年/月/日的新日期,但是每天的不同时段(例如,转换2015-04-05 15:00到2015-04-05 16:00)。

第二个应该只返回格式为dd.MM.yyyy的日期字符串。

现在如果我打电话

var selectedDate = new Date();   // normally function parameter
var startDate = getDateFromDateAtHourOfDay(selectedDate, hour);
document.getElementById("dateLabel").innerHTML = getDateDescriptionFromDate(startDate);

其中hour是一个函数参数,例如15(使用alert测试),在我的“dateLabel”中它表示05.01.2015。但是如果我做的话

alert (selectedDate);

结果是:Sun Apr 05 2015 15:52:26 GMT + 0200(CEST)=&gt;现在

调用之间未修改

selectedDate(警告并设置innerHTML)。

我认为这两个功能没有按照我的想法去做,但也许你会发现错误。 谢谢!

修改

我试过这段代码:

selectedDate = new Date();
alert(selectedDate);    // Sun Apr 05 2015 16:36:07 GMT+0200 (CEST)

var startDate = getDateFromDateAtHourOfDay(selectedDate, hour);
alert(hour);            // 8
alert(startDate);       // Thu Mar 05 2015 08:00:00 GMT+0100 (CET)

document.getElementById("datumLabel").innerHTML = getDateDescriptionFromDate(startDate);        // 05.01.2015

2 个答案:

答案 0 :(得分:0)

我不知道为什么你对selectedDate返回的内容感到惊讶。您只需将其设置为new Date()(现在)。代码中没有任何东西可以从创建的角度来操作这个变量。

然而,您正在操纵值并将更改存储在startDatedateLabel.innerHTML中。您只会注意到格式,因为第二个函数会删除“时间”中的任何更改(由第一个函数完成)。

因此,简而言之:您创建一个日期(现在),更改时间,然后将其格式化为仅显示日期。

var selectedDate = new Date();
//selectedDate value = the date and time right now
var startDate = getDateFromDateAtHourOfDay(selectedDate, hour);
//startDate value = whatever selectedDate was + hours sent as parameter
document.getElementById("dateLabel").innerHTML = getDateDescriptionFromDate(startDate);
//Formatted value of startDate, to only show date

根据评论:

您错过了javascript中的month从零开始。所以你必须做类似的事情:

var month = date.getMonth() + 1; //in the second function

function getDateFromDateAtHourOfDay(date, hour)
{
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();

    var newDate = new Date(year, month, day, hour, 0, 0);

    return (newDate);
}

function getDateDescriptionFromDate(date)
{
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var day = date.getDate();

    return ( (day < 10 ? ("0" + day) : (day)) + "." + (month < 10 ? ("0" + month) : (month)) + "." + year); 
}

var selectedDate = new Date();   // normally function parameter
var startDate = getDateFromDateAtHourOfDay(selectedDate, 15);
document.getElementById("dateLabel").innerHTML = 'Your current system date: ' + getDateDescriptionFromDate(startDate);
<div id="dateLabel"></div>

答案 1 :(得分:0)

如果您尝试这样做,这应该为您提供保存和标签的值,您用于标签的值不同于您尝试使用警报的值。

selectedDate = new Date();
alert(selectedDate);    // Sun Apr 05 2015 16:36:07 GMT+0200 (CEST)

var startDate = getDateFromDateAtHourOfDay(selectedDate, hour);
alert(hour);            // 8
alert(startDate);       // Thu Mar 05 2015 08:00:00 GMT+0100 (CET)

var startDateDesc = getDateDescriptionFromDate(startDate); 
alert(startDateDesc)    // 05.01.2015
document.getElementById("datumLabel").innerHTML = startDateDesc; // 05.01.2015