У меня дата 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, а затем разделил ее
Есть ли другой способ получить это без преобразования в какой-либо другой формат, потому что мой метод правильный, если нет прямого процесса для его получения?
да, я знаю, что это работает нормально. Но это довольно странно, вы видите, что у меня уже есть время в формате UTC, но я все еще конвертирую его в ISO, а затем получаю то, что хочу. Есть ли какой-либо прямой способ получить время из UTC напрямую?
Из объекта Date вы будете имеют либо (1) извлекать строку, а затем манипулировать ею (как вы это делаете), либо (2) извлекать необходимые числа с помощью методов Date. Но IMO ваш текущий подход лучше (гораздо меньше кода, легко понять), хотя вы можете рассмотреть возможность использования регулярного выражения вместо нескольких split.
не знаю, поможет ли это, но здесь написал небольшой код, а вы можете посмотреть stackoverflow.com/questions/43416080/…
хорошо @CertainPerformance, тогда я отвечаю на этот вопрос своим подходом и закрываю его ... спасибо за помощь :)
Почему не 'Sat, 19 Jan 2019 05:40:07 GMT'.substr(17,8)?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как насчет 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 - лучший выбор.
"Хотя я думаю, что использование Date - лучший выбор" почему? Это означает анализ строки с помощью необычного встроенного синтаксического анализатора для создания даты, а затем использование toLocaleString и опции часовой пояс, чтобы, возможно, вернуть ту же строку времени, которая была в оригинале.
Потому что однажды кто-то запросит время, отличное от UTC, или какое-либо другое связанное требование, и в этом случае будет полезен общий ответ Date. Но в любом случае, я также предоставил решение для регулярных выражений, которое, если дата UTC - это все, что требуется, я считаю, отвечает на исходный вопрос.
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 мой вопрос заключался не в том, чтобы найти кратчайший метод ... Я хотел прямое решение, в котором мне не нужно было преобразовывать его в другие формы, а затем извлекать :)
Во всяком случае, теперь вы можете использовать мой метод, потому что он короче. ;-)
Что бы вы хотели сказать о моем новом коде? Смотрите мой ответ.
тем не менее, я соглашусь со своим ответом: P, спасибо за помощь! :)
@priyanshisrivastavaI вы все равно сначала конвертируете в объект Date, затем форматируете его в строку, а затем анализируете строку. Почему бы вам просто не проанализировать строку напрямую, используя регулярные выражения? Или, если вы собираетесь использовать Date, просто используйте функции Date, чтобы получить результат в нужном вам формате, и избегайте 2-го шага синтаксического анализа. Обратите внимание, что вы спросили «без преобразования в какой-либо другой формат», что и делает этот ответ.
Почему вы вообще используете new Date? 'Sat, 19 Jan 2019 05:40:07 GMT'.substr(17,8) выполняет свою работу более надежно.
Не знаю, для вас 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));
Ваш код работает отлично, есть ли причина, по которой вы ищете альтернативу?