Javascript 如何在javascript中将一年中的某一天转换为日期?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4048688/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how can I convert day of year to date in javascript?
提问by mcroteau
I want to take a day of the year and convert to an actual date using the Date object. Example: day 257 of 1929, how can I go about doing this?
我想取一年中的一天并使用 Date 对象转换为实际日期。示例:1929 年第 257 天,我该怎么做?
回答by CMS
"I want to take a day of the year and convert to an actual date using the Date object."
“我想使用 Date 对象将一年中的一天转换为实际日期。”
After re-reading your question, it sounds like you have a year number, and an arbitrary day number (e.g. a number within 0..365
(or 366 for a leap year)), and you want to get a date from that.
重新阅读您的问题后,听起来您有一个年份编号和一个任意日期编号(例如,一个数字0..365
(或闰年为 366)),并且您想从中获取日期。
For example:
例如:
dateFromDay(2010, 301); // "Thu Oct 28 2010", today ;)
dateFromDay(2010, 365); // "Fri Dec 31 2010"
If it's that, can be done easily:
如果是这样,可以轻松完成:
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
}
You could add also some validation, to ensure that the day number is withing the range of days in the year supplied.
您还可以添加一些验证,以确保天数在提供的年份中的天数范围内。
回答by kennebec
// You might need both parts of it-
// 您可能需要它的两个部分-
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
*/
回答by med116
Here is a function that takes a day number, and returns the date object
这是一个函数,它接受一个天数,并返回日期对象
optionally, it takes a year in YYYY format for parameter 2. If you leave it off, it will default to current year.
可选地,参数 2 需要 YYYY 格式的年份。如果不设置它,它将默认为当前年份。
var getDateFromDayNum = function(dayNum, year){
var date = new Date();
if(year){
date.setFullYear(year);
}
date.setMonth(0);
date.setDate(0);
var timeOfFirst = date.getTime(); // this is the time in milliseconds of 1/1/YYYY
var dayMilli = 1000 * 60 * 60 * 24;
var dayNumMilli = dayNum * dayMilli;
date.setTime(timeOfFirst + dayNumMilli);
return date;
}
OUTPUT
输出
// OUTPUT OF DAY 232 of year 1995
var pastDate = getDateFromDayNum(232,1995)
console.log("PAST DATE: " , pastDate);
PAST DATE: Sun Aug 20 1995 09:47:18 GMT-0400 (EDT)
过去日期:1995 年 8 月 20 日星期日 09:47:18 GMT-0400 (EDT)
回答by Stephan
The shortest possible way is to create a new date object with the given year, January as month and your day of the year as date:
最短的方法是使用给定的年份创建一个新的日期对象,一月作为月份,一年中的某一天作为日期:
const date = new Date(2017, 0, 365);
console.log(date.toLocaleDateString());
As for setDate
the correct month gets calculated if the given date is larger than the month's length.
至于setDate
正确的月份如果给定的日期早于一个月的长度更大的被计算。
回答by mway
You have a few options;
你有几个选择;
If you're using a standard format, you can do something like:
如果您使用的是标准格式,则可以执行以下操作:
new Date(dateStr);
If you'd rather be safe about it, you could do:
如果您希望对此保持安全,您可以这样做:
var date, timestamp;
try {
timestamp = Date.parse(dateStr);
} catch(e) {}
if(timestamp)
date = new Date(timestamp);
or simply,
new Date(Date.parse(dateStr));
Or, if you have an arbitrary format, split the string/parse it into units, and do:
或者,如果您有任意格式,请将字符串拆分/解析为多个单元,然后执行以下操作:
new Date(year, month - 1, day)
Example of the last:
最后一个例子:
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]);
回答by David Calhoun
Here's my implementation, which supports fractional days. The concept is simple: get the unix timestamp of midnight on the first day of the year, then multiply the desired day by the number of milliseconds in a day.
这是我的实现,它支持小数天数。概念很简单:获取一年中第一天午夜的 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);
回答by jmullee
this also works ..
这也有效..
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)));
prints "2016-09-13"
打印“2016-09-13”
which is correct as 2016 is a leaap year. (see calendars here: http://disc.sci.gsfc.nasa.gov/julian_calendar.html)
这是正确的,因为 2016 年是闰年。(请参阅此处的日历:http: //disc.sci.gsfc.nasa.gov/julian_calendar.html)
回答by castis
If I understand your question correctly, you can do that from the Date constructor like this
如果我正确理解您的问题,您可以像这样从 Date 构造函数中做到这一点
new Date(year, month, day, hours, minutes, seconds, milliseconds)
All arguments as integers
所有参数为整数