Есть ли способ извлечь строку времени из времени UTC в Javascript

У меня дата UTC, т.е. Sat, 19 Jan 2019 05:40:07 GMT. Я хочу извлечь строку времени с заданной даты, т.е. 05:40:07. все методы, которые я пробовал до сих пор, заключались в том, чтобы получить timestamp. Итак, я написал свой собственный код ниже, чтобы извлечь время

var date = new Date('Sat, 19 Jan 2019 05:40:07 GMT'); 
console.info(date.toISOString().split("T")[1].split(".")[0]);

сначала преобразовал дату в формат ISO, а затем разделил ее

Есть ли другой способ получить это без преобразования в какой-либо другой формат, потому что мой метод правильный, если нет прямого процесса для его получения?

Ваш код работает отлично, есть ли причина, по которой вы ищете альтернативу?

CertainPerformance 19.01.2019 06:49

да, я знаю, что это работает нормально. Но это довольно странно, вы видите, что у меня уже есть время в формате UTC, но я все еще конвертирую его в ISO, а затем получаю то, что хочу. Есть ли какой-либо прямой способ получить время из UTC напрямую?

p u 19.01.2019 06:55

Из объекта Date вы будете имеют либо (1) извлекать строку, а затем манипулировать ею (как вы это делаете), либо (2) извлекать необходимые числа с помощью методов Date. Но IMO ваш текущий подход лучше (гораздо меньше кода, легко понять), хотя вы можете рассмотреть возможность использования регулярного выражения вместо нескольких split.

CertainPerformance 19.01.2019 07:04

не знаю, поможет ли это, но здесь написал небольшой код, а вы можете посмотреть stackoverflow.com/questions/43416080/…

Alen.Toma 19.01.2019 07:04

хорошо @CertainPerformance, тогда я отвечаю на этот вопрос своим подходом и закрываю его ... спасибо за помощь :)

p u 19.01.2019 07:17

Почему не 'Sat, 19 Jan 2019 05:40:07 GMT'.substr(17,8)?

RobG 19.01.2019 22:48
Поведение ключевого слова "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) для оценки ваших знаний,...
3
6
2 243
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Как насчет toLocaleTimeString()?

var date = new Date('Sat, 19 Jan 2019 05:40:07 GMT'); 
console.info(date.toLocaleTimeString('en-US', {timeZone: 'UTC', hour12: false}));

Если вы хотите полностью избежать объекта Date, вы можете просто разобрать строку:

var date = 'Sat, 19 Jan 2019 05:40:07 GMT'
var timeRegex = /(\d\d):(\d\d):(\d\d)/
console.info(timeRegex.exec(date)[0])

Ах я вижу. Я добавил регулярное выражение, которое избегает класса Date. Хотя я думаю, что использование Date - лучший выбор.

Adam Millerchip 19.01.2019 07:18

"Хотя я думаю, что использование Date - лучший выбор" почему? Это означает анализ строки с помощью необычного встроенного синтаксического анализатора для создания даты, а затем использование toLocaleString и опции часовой пояс, чтобы, возможно, вернуть ту же строку времени, которая была в оригинале.

RobG 19.01.2019 13:07

Потому что однажды кто-то запросит время, отличное от UTC, или какое-либо другое связанное требование, и в этом случае будет полезен общий ответ Date. Но в любом случае, я также предоставил решение для регулярных выражений, которое, если дата UTC - это все, что требуется, я считаю, отвечает на исходный вопрос.

Adam Millerchip 19.01.2019 13:16
   var date = new Date('Sat, 19 Jan 2019 05:40:07 GMT');
   var result=date.getUTCHours()+':'+date.getUTCMinutes()+':'+date.getUTCSeconds();
Ответ принят как подходящий

Так что другого метода, более привлекательного, чем мой, я не нашел :)

var date = new Date('Sat, 19 Jan 2019 05:40:07 GMT'); 
console.info(date.toISOString().split("T")[1].split(".")[0]);
Мое решение немного короче вашего метода. ;-)
Bharata 19.01.2019 07:55

@Bharata мой вопрос заключался не в том, чтобы найти кратчайший метод ... Я хотел прямое решение, в котором мне не нужно было преобразовывать его в другие формы, а затем извлекать :)

p u 19.01.2019 08:01

Во всяком случае, теперь вы можете использовать мой метод, потому что он короче. ;-)

Bharata 19.01.2019 08:05

Что бы вы хотели сказать о моем новом коде? Смотрите мой ответ.

Bharata 19.01.2019 08:19

тем не менее, я соглашусь со своим ответом: P, спасибо за помощь! :)

p u 19.01.2019 08:21

@priyanshisrivastavaI вы все равно сначала конвертируете в объект Date, затем форматируете его в строку, а затем анализируете строку. Почему бы вам просто не проанализировать строку напрямую, используя регулярные выражения? Или, если вы собираетесь использовать Date, просто используйте функции Date, чтобы получить результат в нужном вам формате, и избегайте 2-го шага синтаксического анализа. Обратите внимание, что вы спросили «без преобразования в какой-либо другой формат», что и делает этот ответ.

Adam Millerchip 19.01.2019 13:17

Почему вы вообще используете new Date? 'Sat, 19 Jan 2019 05:40:07 GMT'.substr(17,8) выполняет свою работу более надежно.

RobG 19.01.2019 22:49

Не знаю, для вас JSON — это еще один формат? Если нет, то вы можете сделать это следующим образом:

var date = new Date('Sat, 19 Jan 2019 05:40:07 GMT'); 
console.info(date.toJSON().split("T")[1].split(".")[0]);
//or even shorter:
console.info(date.toJSON().slice(-13, -5));

Это немного короче вашего метода.

В другом случае вы можете сделать это следующим образом:

var dateStr = 'Sat, 19 Jan 2019 05:40:07 GMT'; 
var date = new Date(dateStr); 
console.info(dateStr.slice(-12, -4));

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