digamos que tengo dos cadenas que se ven así:
¿Hay un patrón Regex que pueda usar para extraer el número de día?
Actualmente estoy usando Javascript y me gustaría crear una función para hacer el trabajo pesado. He comenzado con uno a continuación, pero parece que no puedo hacerlo funcionar.
function extractDate(str) { return str; }Por favor, comparte conmigo una manera de hacer que funcione.
Aquí hay una función Regex que eliminará el día de la semana y la hora en los elementos:
/(january|february|march|april|june|july|august|september|october|november|december) \d{1,2}, \d{4}/giAquí hay un ejemplo de trabajo de esa expresión regular, luego regístrela.
const x = document.getElementById("target").children; const dateRegex = (/(january|february|march|april|june|july|august|september|october|november|december) \d{1,2}, \d{4}/gi); function extractDate(str) { const parsedDate = str.match(dateRegex); return parsedDate; } for (let i = 0; i < x.length; i++) { // Return as string var strDate = extractDate(x[i].innerText).toString(); // Return as array var arrDate = extractDate(x[i].innerText); console.log(strDate); } <ul id="target"> <li> Friday, January 1, 2008 - 6:53pm </li> <li> Monday, November 13, 2008 - 3:12pm </li> <li> Friday, November 1, 2008 - 6:53pm </li> </ul>Usa momentjs es una solución:
const test1 = 'Thursday, November 13, 2008 - 3:12pm' // 11/13/2008 is not Monday const test2 = 'Saturday, November 1, 2008 - 6:53pm' // 11/01/2008 is not Friday const moment1 = moment(test1, 'dddd, MMMM D, YYYY - h:mma') const moment2 = moment(test2, 'dddd, MMMM D, YYYY - h:mma') console.log(moment1.format('dddd, MMMM D, YYYY - h:mma'), moment1.toDate().getTime()) console.log(moment2.format('dddd, MMMM D, YYYY - h:mma'), moment2.toDate().getTime()) const invalid = 'Monday, November 13, 2008 - 3:12pm' console.log('Invalid Date String', moment(invalid, 'dddd, MMMM D, YYYY - h:mma')) <script src="https://unpkg.com/moment@2.29.1/moment.js"></script>Puede obtener fácilmente todos los datos como
function getDate(str) { const [, day, month, date, year] = str.match(/(\w+), (\w+) (\d+), (\d+)/); return { day, month, date, year }; } console.log(getDate("Monday, November 13, 2008 - 3:12pm")); console.log(getDate("Friday, November 1, 2008 - 6:53pm")); /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; } Si desea obtener particularmente la fecha 13 o 1 , puede hacerlo como
function getDate(str) { const [, day, month, date, year] = str.match(/(\w+), (\w+) (\d+), (\d+)/); return { day, month, date, year }; } const date = getDate("Monday, November 13, 2008 - 3:12pm"); console.log(+date.date); // or // console.log(parseInt(date.date));