Tengo un ciclo extremadamente simple, pero estoy completamente atascado en cómo verificaría una variable de fecha y hora.
Tengo una hoja de cálculo muy grande donde una de las columnas incluye celdas con el siguiente formato: "M/DD/YYYY, H:MM PM/AM"
Entonces, por ejemplo, podría verse así: "25/5/2022, 6:45 p.m."
Estoy ejecutando un ciclo a través de la hoja y cuando encuentra esta celda, actualmente estoy ocultando toda la fila si la celda tiene el valor "25/5/2022, 6:45 p.m.". Sin embargo, lo que realmente quiero hacer es solo ocultar la fila si el valor está entre las 12 p. m. y las 8 p. m. Estoy completamente perdido en cuanto a cómo hacer esto, ¿alguien tiene alguna sugerencia?
Mi guión actual:
let ss = SpreadsheetApp.getActiveSpreadsheet(); let sheet = ss.getSheetByName("Sheet2"); let lastRow = sheet.getLastRow(); let flaggedDate = sheet.getRange(1, 11, lastRow).getValues(); for (i=0; i <= lastRow; i++) { if (flaggedDate[i] == "5/25/2022, 4:30 PM") { sheet.hideRows(i+1); } } } function ltesto() { let ds = "5/25/2022, 4:30 PM"; let dtv = new Date(ds).valueOf(); let ss = SpreadsheetApp.getActiveSpreadsheet(); let sheet = ss.getSheetByName("Sheet2"); let lastRow = sheet.getLastRow(); let flaggedDate = sheet.getRange(1, 11, lastRow).getValues(); for (i = 0; i <= lastRow; i++) { Logger.log(Utilities.formatDate(new Date(flaggedDate[i]),Session.getScriptTimeZone(),"MMM/dd/yyyy HH:mm")); if (new Date(flaggedDate[i]).valueOf() == dtv ) { sheet.hideRows(i + 1); } } }Si esto no funciona, es posible que deba dividir las cadenas de fecha y reconstruir la fecha con el constructor de fecha. Pero ya lo probé en la cadena proporcionada y parece reconocer la fecha correctamente. Y cuando digo fecha, me refiero a fecha y hora.
Solo una función simple para verificar si el constructor de fecha reconoce su cadena de fecha
function test() { let ds = "5/25/2022, 6:45 PM"; let dt = new Date(ds); let dts = Utilities.formatDate(dt, Session.getScriptTimeZone(), "MMM/dd/yyyy HH:mm"); Logger.log(dts); }Si este es un proyecto puramente javascript, aquí está el código, pero si tiene un backend como PHP involucrado, hay una opción y, en mi opinión, es mejor hacerlo en el backend.
// JAVASCRIPT CODE let str_date = "5/25/2022, 8:30 PM"; let [time, modifier] = str_date.split(', ')[1].split(' '); let [hour, minute] = time.split(':'); modifier = modifier.toLocaleLowerCase(); if(hour == 12 && modifier == 'am') hour = '00'; else if(hour == 12 && modifier == 'pm') hour = 12; else hour = modifier == 'am' ? '0'+hour : parseInt(hour) + 12; console.log(hour); if(parseInt(hour) >= 12 && parseInt(hour) <= 20) { console.log("There you go!"); }AQUÍ ESTÁ EL PHP TAMBIÉN
<?php $str_date = '5/25/2022, 4:30 AM'; $date_array = explode(',', $str_date); // convert time to 24 hour clock $_24hour = date("H:i", strtotime(trim($date_array[1]))); $_24hour_array = explode(':', $_24hour); if($_24hour_array[0] >= 12 && $_24hour_array[0] <= 20) { echo "It's that time!"; }