Як я можу перетворити рядок у об’єкт часу дати у JavaScript, вказавши рядок формату?
Я шукаю щось на зразок:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Як я можу перетворити рядок у об’єкт часу дати у JavaScript, вказавши рядок формату?
Я шукаю щось на зразок:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Відповіді:
Я думаю, що це може вам допомогти: http://www.mattkruse.com/javascript/date/
Існує getDateFromFormat()функція, яку можна трохи налаштувати, щоб вирішити свою проблему.
Оновлення: оновлена версія зразків доступна на javascripttoolbox.com
TypeError: Object Date has no method 'getDateFromFormat'
Використовуйте, якщо ваша струна сумісна з . Якщо ваш формат є несумісним (я думаю, що він є), вам слід самостійно проаналізувати рядок (це має бути легко за допомогою регулярних виразів) та створити новий об'єкт дати з явними значеннями для року, місяця, дати, години, хвилини та секунди.new Date(dateString)Date.parse()
@Christoph Згадує, що використовує регулярний вираз для вирішення проблеми. Ось що я використовую:
var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString);
var dateObject = new Date(
(+dateArray[1]),
(+dateArray[2])-1, // Careful, month starts at 0!
(+dateArray[3]),
(+dateArray[4]),
(+dateArray[5]),
(+dateArray[6])
);
Це аж ніяк не інтелігентно, просто налаштуйте регулярний вираз і new Date(blah)відповідно до ваших потреб.
Редагувати: Можливо, трохи зрозуміліше в ES6 за допомогою деструктуризації:
let dateString = "2010-08-09 01:02:03"
, reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
, [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
, dateObject = new Date(year, month-1, day, hours, minutes, seconds);
Але від усієї чесності в ці дні я досягаю чогось, як Момент
/gпрапор, лише щоб встановити lastIndexйого 0згодом? Просто не використовуйте глобальну відповідність.
/gбула неохайна копія / вставлення з існуючого проекту. lastindexбув доданий редактором (для боротьби з \gгадаю?). Я зараз їх видалю. Дякую, що вказали на це.
Немає складних процедур форматування дати та часу в JavaScript.
Вам доведеться використовувати зовнішню бібліотеку для форматованого виведення дати, "Формат дати JavaScript" від Flagrant Badassery виглядає дуже перспективно.
Для вхідного перетворення вже зроблено кілька пропозицій. :)
Перевірте Moment.js . Це сучасна і потужна бібліотека, яка складається з чудових функцій дати (або їх відсутності) у JavaScript.
Тільки для оновленої відповіді тут, є хороший js lib на http://www.datejs.com/
Datejs - це бібліотека дат JavaScript з відкритим кодом для розбору, форматування та обробки.
var temp1 = "";
var temp2 = "";
var str1 = fd;
var str2 = td;
var dt1 = str1.substring(0,2);
var dt2 = str2.substring(0,2);
var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);
var yr1 = str1.substring(6,10);
var yr2 = str2.substring(6,10);
temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;
var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);
var date1 = new Date(cfd);
var date2 = new Date(ctd);
if(date1 > date2) {
alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}
Зовнішня бібліотека - це надмір для розбору однієї чи двох дат, тому я зробив власну функцію, використовуючи рішення Олі та Крістофа . Тут у центральній Європі ми рідко використовуємо будь-який інший, але формат ОП, тому цього повинно вистачити для простих додатків, які використовуються тут.
function ParseDate(dateString) {
//dd.mm.yyyy, or dd.mm.yy
var dateArr = dateString.split(".");
if (dateArr.length == 1) {
return null; //wrong format
}
//parse time after the year - separated by space
var spacePos = dateArr[2].indexOf(" ");
if(spacePos > 1) {
var timeString = dateArr[2].substr(spacePos + 1);
var timeArr = timeString.split(":");
dateArr[2] = dateArr[2].substr(0, spacePos);
if (timeArr.length == 2) {
//minutes only
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
} else {
//including seconds
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
}
} else {
//gotcha at months - January is at 0, not 1 as one would expect
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
}
}
Date.parse() досить розумний, але я не можу гарантувати, що формат буде правильно розбиратися.
Якщо цього не відбувається, вам доведеться знайти щось, щоб з'єднати їх. Ваш приклад досить простий (просто чисто число), тому дотик до REGEX (або навіть string.split()- може бути швидше) в парі з деякими parseInt()дозволить вам швидко побачити побачення.
time = "2017-01-18T17:02:09.000+05:30"
t = new Date(time)
hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);
t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec
Тільки щоб дати мої 5 копійок.
Мій формат дати - dd.mm.yyyy (формат Великобританії), і жоден із перерахованих вище прикладів не працював для мене. Усі парсери розглядали мм як день, а дд - місяць.
Я знайшов цю бібліотеку: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/, і вона працювала, тому що ви можете сказати порядок таких полів:
>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)
Я сподіваюся, що хтось допомагає.
Moment.js впорається з цим:
var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;
Ви можете використовувати для цього бібліотеку moment.js. Я використовую лише для отримання конкретного часу виводу, але ви можете вибрати, який саме формат потрібно вибрати.
Довідка:
1. бібліотека моменту: https://momentjs.com/
2. Спеціальні функції часу та дати: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript
convertDate(date) {
var momentDate = moment(date).format('hh : mm A');
return momentDate;
}
і ви можете назвати цей метод на зразок:
this.convertDate('2020-05-01T10:31:18.837Z');
Я сподіваюся, що це допомагає. Насолоджуйтесь кодуванням.
Щоб повністю задовольнити рядок перетворення Date.parse у формат dd-mm-YYYY, як зазначено в RFC822, якщо ви використовуєте синтаксичний розбір yyyy-mm-dd, ви можете помилитися.
//Here pdate is the string date time
var date1=GetDate(pdate);
function GetDate(a){
var dateString = a.substr(6);
var currentTime = new Date(parseInt(dateString ));
var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
var day =("0"+ currentTime.getDate()).slice(-2);
var year = currentTime.getFullYear();
var date = day + "/" + month + "/" + year;
return date;
}