Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试创建具有未来日期的Javascript时钟_Javascript_Date - Fatal编程技术网

尝试创建具有未来日期的Javascript时钟

尝试创建具有未来日期的Javascript时钟,javascript,date,Javascript,Date,我正在尝试创建一个Javascript时钟,从当前日期算起,未来3个月15天280年。。。到目前为止,我已经设法找出了如何让月份和年份在某种程度上正确显示。。。但例如,当前日期为2295年12月45日星期五,我想知道如何获得它,因此正确的日期为2296年1月14日 以下是我目前的代码: function date_time(id) { date = new Date; year = date.getFullYear() + 280; month = dat

我正在尝试创建一个Javascript时钟,从当前日期算起,未来3个月15天280年。。。到目前为止,我已经设法找出了如何让月份和年份在某种程度上正确显示。。。但例如,当前日期为2295年12月45日星期五,我想知道如何获得它,因此正确的日期为2296年1月14日

以下是我目前的代码:

    function date_time(id)
    {
    date = new Date;
    year = date.getFullYear() + 280;
    month = date.getMonth() + 3;
    months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
    if(month = "00") {d = 31} if(d>31);
    if(month = "01") {d = 28} if(d>28);
    if(month = "02") {d = 31} if(d>31);
    if(month = "03") {d = 30} if(d>30);
    if(month = "04") {d = 31} if(d>31);
    if(month = "05") {d = 30} if(d>30);
    if(month = "06") {d = 31} if(d>31);
    if(month = "07") {d = 31} if(d>31);
    if(month = "08") {d = 30} if(d>30);
    if(month = "09") {d = 31} if(d>31);
    if(month = "10") {d = 30} if(d>30);
    if(month = "11") {d = 31} if(d>31);
    d = date.getDate() + 15;
    day = date.getDay();
    days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
    if (d < 10) {
        d = "0" + d;
    }
    h = date.getHours();
    if(h<10)
    {
            h = "0"+h;
    }
    m = date.getMinutes();
    if(m<10)
    {
            m = "0"+m;
    }
    s = date.getSeconds();
    if(s<10)
    {
            s = "0"+s;
    }
    result = ''+days[day]+', '+months[month]+' '+d+', '+year+' '+h+':'+m+':'+s;
    document.getElementById(id).innerHTML = result;
    setTimeout('date_time("'+id+'");','1000');
    return true;
    }

没那么难,试试这个

//3个月15天280

$(document).ready(function(){
 var date = new Date();
 var newDate = new Date(date.getFullYear()+280,date.getMonth()+2,date.getDate()+15);// I m adding 2 to month because it returns from 0-11 not from1-12 thats why for 3 months later i m adding 2.
    alert("Today : "+ date);
    alert("after 3 months and 15 days and 280 Years : "+newDate);
});

您可以通过jquery和html轻松实现: HTML:

more u还可以通过在页面中添加jquery ui插件来根据需要设置格式。为此,您需要以下代码:

$("#formattedDate").val($.datepicker.formatDate('dd M yy', new Date(futureDate)));

如果你想分别得到未来的月份、年份和天数,这也容易得多

OAD的答案几乎可以,但结果的时间不正确

我扩展了他的想法,只是一个示例,不是完整的解决方案:

var d = new Date();
console.log(d.toString())
d.setFullYear(d.getFullYear() + 280);
d.setMonth(d.getMonth() + 3);
// to get also correct time (60*60*24*15*1000) is just 15 days in milliseconds
d.setTime(d.getTime() + (60*60*24*15*1000))
console.log(d.toString());

假设这是在1996年2月14日,而不是在未来这么多年/月/天。如果计算到某个特定日期,请使用UTC时间,这样无论您身在何处,都可以得到相同的日期

var t = new Date(); // get time.
t.setUTCDate(t.getUTCDate() + 15);  // calculate in universal time
t.setUTCMonth(t.getUTCMonth() + 3);
t.setUTCFullYear(t.getUTCFullYear() + 280);
console.log(t) // display local time

您的代码有几个问题:

function date_time(id)
{
date = new Date;
代码应缩进以确保可读性,变量应使用变量保持在本地。不使用变量调用新日期是可以的,但使用括号更清楚:

function date_time(id) {
  var date = new Date();
  var year = date.getFullYear() + 280;
  var month = date.getMonth() + 3;
然后:

使用数组初始化器创建数组更简单:

var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 
            'August', 'September', 'October', 'November', 'December'];
在以下方面:

if(month = "00") {d = 31} if(d>31);
第二个if块不执行任何操作。特定月份的天数基于月份和年份。这里有很多关于如何实现这一点的答案,但只要给定一个名为Date的日期对象即可:

但d的值会立即被覆盖,并且是错误的来源:

d = date.getDate() + 15;
day = date.getDay();
今天仍然是最初的一天

days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
同样,数组文本会更干净。以下pads为一位数:

if (d < 10) {
    d = "0" + d;
}
然后像这样使用它:

pad(3, 3); // '003'

result = ''+days[day]+', '+months[month]+' '+d+', '+year+' '+h+':'+m+':'+s;
document.getElementById(id).innerHTML = result;
setTimeout('date_time("'+id+'");','1000');
要确保超时在下一整秒之后运行,并且在每次调用之后运行时不会跳过超时,请使用当前毫秒设置延迟:

var lag = 1020 - date.getMilliseconds();
无论如何,最终的函数可以如下所示:

function date_time(id) {
  var date = new Date();

  // Increment date by 280 years, 3 months and 15 days
  date.setFullYear(date.getFullYear() + 280, date.getMonth() + 3, date.getDate() + 15)

  // Arrays for month and day names
  var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
                'August', 'September', 'October', 'November', 'December'];
  var days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');

  // Pad function
  function pad(n, c) {
    return ('000' + n).slice(-1*c);
  }

  // Set the lag to the next call
  var lag = 1020 - date.getMilliseconds();

  // Format for output
  var dateString = days[date.getDay()] + ', ' +
                   months[date.getMonth()] + ' ' +
                   date.getDate() + ', ' +
                   date.getFullYear() + ' ' +
                   pad(date.getHours(), 2) + ':' +
                   pad(date.getMinutes(), 2) + ':' +
                   pad(date.getSeconds(), 2);
  document.getElementById(id).innerHTML = dateString;
  setTimeout('date_time("' + id + '")', lag);
}

不需要创建第二个日期,OP需要添加三个月,而不是两个月。因此:date.setFullYeardate.getFullYear+280,date.getMonth+3,date.getDate+15。@RobG在代码旁边的注释中添加2的原因,请仔细阅读。无偿使用未标记、未请求的库是非常糟糕的形式。输入元素没有结束标记。在这种情况下,使用UTC方法没有任何好处。年、月和日期都可以在一次通话中设置,请参阅。如果不知道日期,只知道到该日期的时间量,则如果观众是国际观众,则应使用UTC时间。因为再过6小时,我的当地时间就会提前一天。使用当地时间将给我2月15日?您需要确定一个公共时间,当您计算的日期、月份或日期已知时,所有已知的都是要添加到当前日期和时间的时段。观众是否是国际观众并不重要。280年、3个月和15天代表了不同的时间量,这取决于它开始的时间。如果合适,请使用UTC。
if (d < 10) {
    d = "0" + d;
}
function pad(n, c) {
  return ('000' + n).slice(-1*c);
}
pad(3, 3); // '003'

result = ''+days[day]+', '+months[month]+' '+d+', '+year+' '+h+':'+m+':'+s;
document.getElementById(id).innerHTML = result;
setTimeout('date_time("'+id+'");','1000');
var lag = 1020 - date.getMilliseconds();
function date_time(id) {
  var date = new Date();

  // Increment date by 280 years, 3 months and 15 days
  date.setFullYear(date.getFullYear() + 280, date.getMonth() + 3, date.getDate() + 15)

  // Arrays for month and day names
  var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
                'August', 'September', 'October', 'November', 'December'];
  var days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');

  // Pad function
  function pad(n, c) {
    return ('000' + n).slice(-1*c);
  }

  // Set the lag to the next call
  var lag = 1020 - date.getMilliseconds();

  // Format for output
  var dateString = days[date.getDay()] + ', ' +
                   months[date.getMonth()] + ' ' +
                   date.getDate() + ', ' +
                   date.getFullYear() + ' ' +
                   pad(date.getHours(), 2) + ':' +
                   pad(date.getMinutes(), 2) + ':' +
                   pad(date.getSeconds(), 2);
  document.getElementById(id).innerHTML = dateString;
  setTimeout('date_time("' + id + '")', lag);
}