Формат даты от ГГГГММДД до ГГММДД в ​​Javascript

У меня есть этот код, который показывает год в формате ГГГГММДД. Я бы хотел, чтобы результат был в формате 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);

Замените substring(0, 10) на substring(2, 10)

Guy Incognito 12.07.2024 08:21

Остерегаться. Как бы вы тогда узнали разницу между 1914 и 2014 годами? Проблема 2000 года.

Roko C. Buljan 12.07.2024 08:24

@RokoC.Buljan Что значит 50 и 50? Пожалуйста, уточните подробнее

Elaine Byene 12.07.2024 08:26
en.m.wikipedia.org/wiki/Year_2000_problem
Roko C. Buljan 12.07.2024 08:27

@RokoC.Buljan Я не думаю, что мой код проработает 76 лет, чтобы дожить до 2100 года и столкнуться с этой проблемой :) или я что-то упускаю?

Elaine Byene 12.07.2024 08:28

Только не сокращайте годы. А что насчет года назад? Скажем, 1924 год?

Roko C. Buljan 12.07.2024 08:30

Я понимаю и спасибо, что указали на это. Я читал об этом, когда был ребенком, но никогда не знал об этой проблеме.

Elaine Byene 12.07.2024 08:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
7
75
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Чтобы преобразовать формат даты с 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). ;-)

RobG 12.07.2024 12:26

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

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());

Другие вопросы по теме