javascript — преобразование дня в год в дату

Как мне найти дату в этом году, если я знаю день только как число …

Скажем, если я знаю, что этот день равен «1», то для получения 01.01.2014, если я знаю, что этот день равен «32», чтобы получить 01.02.2014?

Возможно ли это в JavaScript?

Как насчет php?

0

Решение

PHP путь:

$first_day_of_this_year = strtotime( date( 'Y-01-01 00:00:00' ) ); //as unix timestamp
$after_32_days = $first_day_of_this_year + 32 * 24 * 60 * 60;
echo date( "Y-m-d", $after_32_days );

Это будет выводить 2014-02-02

Это всегда будет работать на текущий год. Если вы хотите использовать его на другой год, просто замените Y в первой функции date () с желаемым годом.

Это должно работать правильно с високосными годами.

РЕДАКТИРОВАТЬ:

Я сделал функцию:

function day_number_to_date( $day_in_year, $year = null ) {
$year = ( is_null( $year ) ) ? date("Y") : $year; //use current year if it was not passed to function
$first_day_of_year = strtotime( date( "$year-01-01 00:00:00" ) ); //first day of year as unix timestamp
$days_to_add = $day_in_year - 1;
$target_timestamp = $first_day_of_year + $days_to_add * 24 * 60 * 60;
$target_date = date( "Y-m-d", $target_timestamp );
return $target_date;
}
echo day_number_to_date( 32 ); //2014-02-01
echo day_number_to_date( 32, 2020 ); //2020-02-01
echo day_number_to_date( 400 ); //2015-02-04
1

Другие решения

В JavaScript вы можете сделать это, просто создав новый Date объект с параметром days, установленным на требуемый день года — см. раздел примечаний к параметрам на MDN:

var dayInYear = 32;
var newDate = new Date(2014, 0, dayInYear);
// newDate is 01 Feb.

или если у вас есть существующий объект Date:

var theDate = new Date('01/01/2014');
var dayInYear = 32;
var newDate = new Date(theDate.getFullYear(), theDate.getMonth(), dayInYear);
1

После прочтения вашего вопроса звучит так, будто вы хотите указать день и год для функции, чтобы получить конкретную дату.

function getDateFromDay( year, day) {
return new Date((new Date(year, 0)).setDate(day));
}

getDateFromDay(2014, 1); // will give Wed Jan 01 2014 00:00:00
1

Попробуй это:

var date = new Date("" + new Date().getFullYear() );
var day = 32;

date.setDate(date.getDate() + day-1);

console.log(date); // => Sat Feb 01 2014 ...
1
function day2Date( day, year ) {
return new Date(year,0,day);
}
console.log( day2Date( 32, 2014 ) ); //gives Sat Feb 01 2014 00:00:00
0

Вам также понадобится ваш код, чтобы знать, какой это год, — что надоедливо 29 февраля каждый четвертый год — но это всего лишь вопрос последовательного вычитания продолжительности месяца, пока остаток не станет меньше длины следующего месяца (при этом отслеживая из которого месяц был вычтен последним). Что-то вроде этого фрагмента (псевдо-C):

day_to_month (year, day_in_year)
{
day_count = day_in_year;
if (not_leap_year());
while (day_in_year < month [month_count])
{
subtract month[month_count++];
}
else
while (day_in_year < leap_month [month_count])
{
subtract leap_month [month_count++];
}
}
date_set (year, month_count, day_count);

Я не пишу javascript, но я не знаю причин, по которым это невозможно сделать даже в bash-скрипте — просто требуется способность объявлять и инициализировать массивы, а также основные арифметические функции и функции управления потоком.

0
По вопросам рекламы [email protected]