У меня есть этот код, который показывает год в формате ГГГГММДД. Я бы хотел, чтобы результат был в формате YYMMDD
. В основном для замены 2014 года только на 14.
let date = new Date();
let timeNow = new Date(date.valueOf()-60*1000*date.getTimezoneOffset()).toISOString().substring(0, 10).replace(/-/g,"");
console.info(timeNow);
PS: Если это имеет значение, я нахожусь в часовом поясе +5:30. Мой первоначальный код был без свистков, но кто-то заметил, что мне нужно использовать getTimezoneOffset, иначе может быть разница в 5,5 часов и создать проблемы в будущем:
let date = new Date();
let timeToday = new Date(Date.now()).toISOString().slice(0, 10).replace(/-/g,"");
console.info(timeToday);
Остерегаться. Как бы вы тогда узнали разницу между 1914 и 2014 годами? Проблема 2000 года.
@RokoC.Buljan Что значит 50 и 50? Пожалуйста, уточните подробнее
@RokoC.Buljan Я не думаю, что мой код проработает 76 лет, чтобы дожить до 2100 года и столкнуться с этой проблемой :) или я что-то упускаю?
Только не сокращайте годы. А что насчет года назад? Скажем, 1924 год?
Я понимаю и спасибо, что указали на это. Я читал об этом, когда был ребенком, но никогда не знал об этой проблеме.
Чтобы преобразовать формат даты с YYYYMMDD
в YYMMDD
, вы можете изменить свой код, чтобы извлечь две последние цифры года.
let date = new Date();
let timeNow = new Date(date.valueOf() - 60 * 1000 * date.getTimezoneOffset())
.toISOString()
.substring(0, 10)
.replace(/-/g, "")
.substring(2); // Extract the last two digits of the year
console.info(timeNow);
Метод substring(2)
удаляет первые два символа строки, эффективно преобразуя YYYYMMDD
в YYMMDD
.
Если вы сначала выполните замену, вам понадобится только один вызов подстроки, т. е. ....toISOString().replace(/-/g, '').substring(2,8)
. ;-)
Попробуй это:
let date = new Date();
let timeNow = new Date(date.valueOf() - 60 * 1000 * date.getTimezoneOffset()).toISOString().slice(2, 10).replace(/-/g, "");
console.info(timeNow);
Существует множество способов форматирования даты, однако метод в ОП не является хорошим способом сделать это. Кажется неэффективным использовать метод, который создает временную метку с неправильным смещением, поэтому (несколько запутанно) необходимо внести исправления, чтобы получить требуемое смещение, когда объект Date может создавать временные метки с требуемым смещением без какой-либо помощи.
Существует множество вариантов с гораздо меньшим количеством кода и более простой логикой, например.
Используя базовые методы Date:
const formatYMD = (d = new Date()) => {
// Pad numbers to 2 digits
let z = (n) => ('0'+ n).slice(-2);
return z(d.getFullYear()) + z(d.getMonth()+1) + z(d.getDate());
}
console.info(formatYMD());
Использование toLocaleString:
const formatYMD = (d = new Date()) => d.toLocaleString('sv').slice(2, 10).replace(/\D/g,'');
console.info(formatYMD());
Использование Intl.DateTimeFormat:
const formatYMD = (function() {
// Keep formatter in a closure so more efficient
let f = new Intl.DateTimeFormat('sv', {
year: '2-digit',
month: '2-digit',
day: '2-digit'
});
// Actual function
return (d = new Date()) => f.format(d).replace(/\D/g, '');
})();
console.info(formatYMD());
Замените
substring(0, 10)
наsubstring(2, 10)