尝试创建具有未来日期的Javascript时钟
我正在尝试创建一个Javascript时钟,从当前日期算起,未来3个月15天280年。。。到目前为止,我已经设法找出了如何让月份和年份在某种程度上正确显示。。。但例如,当前日期为2295年12月45日星期五,我想知道如何获得它,因此正确的日期为2296年1月14日 以下是我目前的代码:尝试创建具有未来日期的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
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);
}