Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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,我想使用date对象将一年中的某一天转换为实际日期。示例:1929年的第257天,我该怎么做呢?如果我正确理解了你的问题,你可以从日期构造函数开始这样做 new Date(year, month, day, hours, minutes, seconds, milliseconds) 所有参数都是整数您有几个选项 如果您使用的是标准格式,则可以执行以下操作: new Date(dateStr); 如果您希望安全起见,您可以: var date, timestamp; try { ti

我想使用date对象将一年中的某一天转换为实际日期。示例:1929年的第257天,我该怎么做呢?

如果我正确理解了你的问题,你可以从日期构造函数开始这样做

new Date(year, month, day, hours, minutes, seconds, milliseconds)

所有参数都是整数

您有几个选项

如果您使用的是标准格式,则可以执行以下操作:

new Date(dateStr);
如果您希望安全起见,您可以:

var date, timestamp;
try {
    timestamp = Date.parse(dateStr);
} catch(e) {}
if(timestamp)
    date = new Date(timestamp);

or simply,    

new Date(Date.parse(dateStr));
或者,如果您有任意格式,请将字符串拆分/解析为多个单元,然后执行以下操作:

new Date(year, month - 1, day)
最后一个例子:

var dateStr = '28/10/2010'; // uncommon US short date
var dateArr = dateStr.split('/');
var dateObj = new Date(dateArr[2], parseInt(dateArr[1]) - 1, dateArr[0]);
“我想使用date对象将一年中的某一天转换为实际日期。”

重新阅读您的问题后,听起来您有一个年份号和一个任意的日期号(例如,
0..365
(或366表示闰年)),您希望从中获取日期

例如:

dateFromDay(2010, 301); // "Thu Oct 28 2010", today ;)
dateFromDay(2010, 365); // "Fri Dec 31 2010"
如果是这样,可以很容易地做到:

function dateFromDay(year, day){
  var date = new Date(year, 0); // initialize a date in `year-01-01`
  return new Date(date.setDate(day)); // add the number of days
}

您还可以添加一些验证,以确保天数在所提供年份的天数范围内。

//您可能需要这两部分-

Date.fromDayofYear= function(n, y){
    if(!y) y= new Date().getFullYear();
    var d= new Date(y, 0, 1);
    return new Date(d.setMonth(0, n));
}
Date.prototype.dayofYear= function(){
    var d= new Date(this.getFullYear(), 0, 0);
    return Math.floor((this-d)/8.64e+7);
}

var d=new Date().dayofYear();
//
alert('day#'+d+' is '+Date.fromDayofYear(d).toLocaleDateString())


/*  returned value: (String)
day#301 is Thursday, October 28, 2010
*/
下面是一个函数,它接受一个日数,并返回date对象 或者,参数2需要一年的YYYY格式。如果您将其禁用,它将默认为当前年份。 输出
过去日期:Sun Aug 20 1995 09:47:18 GMT-0400(EDT)

这是我的实现,它支持分数天。概念很简单:在一年的第一天获取unix时间戳午夜,然后将所需的日期乘以一天中的毫秒数

/**
 * Converts day of the year to a unix timestamp
 * @param {Number} dayOfYear 1-365, with support for floats
 * @param {Number} year (optional) 2 or 4 digit year representation. Defaults to
 * current year.
 * @return {Number} Unix timestamp (ms precision)
 */
function dayOfYearToTimestamp(dayOfYear, year) {
  year = year || (new Date()).getFullYear();
  var dayMS = 1000 * 60 * 60 * 24;

  // Note the Z, forcing this to UTC time.  Without this it would be a local time, which would have to be further adjusted to account for timezone.
  var yearStart = new Date('1/1/' + year + ' 0:0:0 Z');

  return yearStart + ((dayOfYear - 1) * dayMS);
}

// usage

// 2015-01-01T00:00:00.000Z
console.log(new Date(dayOfYearToTimestamp(1, 2015)));

// support for fractional day (for satellite TLE propagation, etc)
// 2015-06-29T12:19:03.437Z
console.log(new Date(dayOfYearToTimestamp(180.51323423, 2015)).toISOString);
这也行

function to2(x) { return ("0"+x).slice(-2); }
function formatDate(d){
    return d.getFullYear()+"-"+to2(d.getMonth()+1)+"-"+to2(d.getDate());
    }
document.write(formatDate(new Date(2016,0,257)));
打印“2016-09-13”


这是正确的,因为2016年是leaap年。(请参见此处的日历:)

最短的方法是创建一个新的日期对象,其中给定的年份为一月,日期为一年中的某一天:

const date=新日期(2017,0365);

log(date.toLocaleDateString())如果您始终想要UTC日期:

函数getDateFromDayOfYear(年,日){ 返回新日期(UTC日期(年,0,天)) } console.log(getDateFromDayOfYear(2020,1))//2020-01-01T00:00:00.000Z console.log(getDateFromDayOfYear(2020,305))/2020-10-31T00:00:00.000Z
console.log(getDateFromDayOf Year(2020,366))/2020-12-31T00:00:00.000Z
抱歉。。意思是如果我有一年中的某一天。比如说1995年的第232天。。。我怎样才能用它来构建一个新的日期呢?对不起。。意思是如果我有一年中的某一天。比如说1995年的第232天。。。如何从中构造新的日期?var d=Date.fromDayofYear(2321995)setDate()只接受月数0-30,因此我认为人们在没有对其进行全面测试的情况下对此进行了升级。看看我在底部的答案,看看另一个函数。(我有一个巴特·辛普森(bart simpson)的头像)根据医生的说法是正确的:“如果一个月有31天:32天将导致下个月的第一天”或者更短:
返回新日期(年,0,天)
;-)正如@med116所说的——仔细测试。我用这个答案得到了一些非常奇怪的结果。@MitchHaile,应该有用,med116说的不对。你能分享这些奇怪的结果吗?通常,由于时区差异,日期操作函数中会出现奇怪的结果。警告:此解决方案存在时区问题。有时它会给出错误的答案。
/**
 * Converts day of the year to a unix timestamp
 * @param {Number} dayOfYear 1-365, with support for floats
 * @param {Number} year (optional) 2 or 4 digit year representation. Defaults to
 * current year.
 * @return {Number} Unix timestamp (ms precision)
 */
function dayOfYearToTimestamp(dayOfYear, year) {
  year = year || (new Date()).getFullYear();
  var dayMS = 1000 * 60 * 60 * 24;

  // Note the Z, forcing this to UTC time.  Without this it would be a local time, which would have to be further adjusted to account for timezone.
  var yearStart = new Date('1/1/' + year + ' 0:0:0 Z');

  return yearStart + ((dayOfYear - 1) * dayMS);
}

// usage

// 2015-01-01T00:00:00.000Z
console.log(new Date(dayOfYearToTimestamp(1, 2015)));

// support for fractional day (for satellite TLE propagation, etc)
// 2015-06-29T12:19:03.437Z
console.log(new Date(dayOfYearToTimestamp(180.51323423, 2015)).toISOString);
function to2(x) { return ("0"+x).slice(-2); }
function formatDate(d){
    return d.getFullYear()+"-"+to2(d.getMonth()+1)+"-"+to2(d.getDate());
    }
document.write(formatDate(new Date(2016,0,257)));