Javascript日期修改

Javascript Date Modifiying

本文关键字:修改 日期 Javascript      更新时间:2023-09-26


我已经编写了以下两个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);

其中小时是一个函数参数,例如15(用警报测试),在我的"日期标签"中,它写着2015年1月5日。但如果我做

alert (selectedDate);

结果是:2015年4月5日星期日15:52:26 GMT+0200(CEST)=>现在。

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

我不知道你为什么对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>

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

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