как мне преобразовать день года в дату в javascript?

Если вы создаете массив с помощью изменчивости, а затем хотите вернуть неизменяемую версию, вы можете просто вернуть изменяемый массив как «NSArray» через наследование.

- (NSArray *)arrayOfStrings {
    NSMutableArray *mutableArray = [NSMutableArray array];
    mutableArray[0] = @"foo";
    mutableArray[1] = @"bar";

    return mutableArray;
}

Если вы «доверяете» вызывающей стороне обрабатывать (технически все еще изменяемый) возвращаемый объект как неизменяемый NSArray, это более дешевый вариант, чем [mutableArray copy].

Apple соглашается:

Чтобы определить, может ли он изменить полученный объект, получатель сообщения должен полагаться на формальный тип возвращаемого значения. Если он получает, например, объект массива, типизированный как неизменяемый, он не должен пытаться изменить его . Неприемлемой практикой программирования является определение, является ли объект изменчивым, основываясь на принадлежности к классу.

Описанная выше практика обсуждается более подробно здесь:

Рекомендация: возвращайте mutableArray.copy или mutableArray, если тип возвращаемого значения - NSArray

21
задан mcroteau 28 November 2017 в 09:50
поделиться

3 ответа

Если я правильно понимаю ваш вопрос, вы можете сделать это с помощью конструктора Date следующим образом

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

Все аргументы в виде целых чисел

0
ответ дан 29 November 2019 в 06:36
поделиться

Вот функция, которая принимает номер дня и возвращает объект даты

, необязательно, для параметра 2 требуется год в формате ГГГГ. Если вы его отключите, по умолчанию будет выбран текущий год.

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 OF DAY 232 of year 1995

var pastDate = getDateFromDayNum(232,1995)
console.log("PAST DATE: " , pastDate);

ПРОШЕДШАЯ ДАТА: вс 20 августа 1995 г. 09:47:18 GMT-0400 (EDT)

5
ответ дан 29 November 2019 в 06:36
поделиться

У вас есть несколько вариантов:

Если вы используете стандартный формат, вы можете сделать что-то вроде:

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]);
1
ответ дан 29 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: