Я хочу взять день в году и преобразовать в фактическую дату с помощью объекта Date. Пример: день 257 из 1929 года, как я могу это сделать?
Как я могу конвертировать день года в javascript?
Ответ 1
"Я хочу взять день в году и перейти к фактической дате с помощью объекта 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
}
Вы также можете добавить некоторую проверку, чтобы гарантировать, что номер дня соответствует диапазону дней в году.
Ответ 2
//Возможно, вам нужны обе части -
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
*/
Ответ 3
Вот функция, которая принимает номер дня и возвращает объект даты
по желанию, для параметра 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);
ПОСЛЕДНЯЯ ДАТА: Вс авг. 20 1995 09:47:18 GMT-0400 (EDT)
Ответ 4
Самый короткий путь - создать новый объект даты с данным годом, январь как месяц и ваш день года в качестве даты:
const date = new Date(2017, 0, 365);
console.log(date.toLocaleDateString());
Ответ 5
У вас есть несколько вариантов:
Если вы используете стандартный формат, вы можете сделать что-то вроде:
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]);
Ответ 6
Здесь моя реализация, которая поддерживает дробные дни. Концепция проста: получить отметку времени 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);
Ответ 7
Если я правильно понял ваш вопрос, вы можете сделать это из конструктора Date, подобного этому
new Date(year, month, day, hours, minutes, seconds, milliseconds)
Все аргументы как целые числа
Ответ 8
это тоже работает.
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 год - год. (см. здесь календари: http://disc.sci.gsfc.nasa.gov/julian_calendar.html)