2010-03-05 42 views
18

Necesito resaltar las fechas entre una fecha de inicio y una fecha de finalización, que yo debería ser capaz de especificar. ¿Alguien puede ayudarme?Resalte las fechas en un rango específico con el marcador de fechas de jQuery

+0

Lo sentimos, necesitamos más. ¿Desea resaltar un rango o solo las 2 fechas? ¿Estás usando el jquery ui datepicker o has creado el tuyo propio? –

+0

rango de fechas –

+0

Posible duplicado: [Es necesario resaltar el rango de fechas en jquery datepicker] (http://stackoverflow.com/questions/16317396/need-to-highlight-range-of-dates-in-jquery-datepicker) (¿O de otra manera?) – Mogsdad

Respuesta

31

Puede usar el beforeShowDay event. Se llamará para cada fecha que deba mostrarse en el calendario. Pasa en una fecha y devuelve un array con [0] = isSelectable, 1 = CssClass, [2] = Algunos texto de sugerencia

$('#whatever').datepicker({ 
      beforeShowDay: function(date) { 
      if (date == myDate) { 
       return [true, 'css-class-to-highlight', 'tooltipText']; 

       } 
      } 
}); 
+2

No olvide devolver [verdadero, ''] si no desea resaltar un día: http://stackoverflow.com/a/9358119/664132 – basic6

+1

cómo el parámetro "fecha" "se inicializa, ¿cuál es la fecha de inicio y final de ese valor para la función (fecha)? –

0

Si está utilizando de datepick Keith madera se puede utilizar el siguiente ejemplo tomado de here

$(selector).datepick({onDate: highlightDays}); 

function highlightDays(date) { 
    return {selectable: true, dateClass: 'highlight-custom', title: 'tooltip'}; 
} 
21

¡He aquí un ejemplo de trabajo! Necesitarás hacer un paquete desde aquí con http://jqueryui.com/download con núcleo, widget y datepicker.

La parte Javascript a proponer a:

<script> 
$(document).ready(function() { 

    var dates = ['22/01/2012', '23/01/2012']; // 
      //tips are optional but good to have 
    var tips = ['some description','some other description'];  

    $('#datepicker').datepicker({     
     dateFormat: 'dd/mm/yy', 
     beforeShowDay: highlightDays, 
     showOtherMonths: true, 
     numberOfMonths: 3, 
    }); 

    function highlightDays(date) { 
     for (var i = 0; i < dates.length; i++) { 
      if (new Date(dates[i]).toString() == date.toString()) {    
       return [true, 'highlight', tips[i]]; 
      } 
     } 
     return [true, '']; 
    } 

}); 
</script> 

El HTML parte:

<div id="datepicker"></div> 

Añadir alguna parte de este CSS:

td.highlight {border: none !important;padding: 1px 0 1px 1px !important;background: none !important;overflow:hidden;} 
td.highlight a {background: #99dd73 url(bg.png) 50% 50% repeat-x !important; border: 1px #88a276 solid !important;} 

y se necesita para hacer una imagen pequeña llamado bg.png para que funcione

+0

Pero eso no cambia el bgcolor de la fecha, solo de la celda de la tabla donde podemos ver el borde. – mplungjan

+0

Tendrá que agregar otra pieza de código CSS para especificar también el color de la etiqueta dentro de su elemento como este '.highlight a { fondo: rojo; } ' Ahora van a ser ambos de color rojo :) – Mike

+0

Lo intenté. No funcionó con ese selector. Consulte aquí: http://stackoverflow.com/questions/9023818/correct-way-to-change-specific-dates-cell-background-color-on-datepicker – mplungjan

13

pensaba que iba a tirar mis dos centavos, ya que parece de peso más rápido y más ligero que otros:

jQuery(function($) { 
    var dates = { 
    '2012/6/4': 'some description', 
    '2012/6/6': 'some other description' 
    }; 

    $('#datepicker').datepicker({ 
    beforeShowDay: function(date) { 
     var search = date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate(); 

     if (search in dates) { 
     return [true, 'highlight', (dates[search] || '')]; 
     } 

     return [false, '', '']; 
    } 
    }); 
}); 
+0

Esto funcionó perfectamente para mí: copiar y pegar. Buen trabajo @ mark-murphy! – HPWD

0

Mugur, su código hizo el trabajo no es para mí en Firefox o Safari, requirió la date var a estar formateado (que obtuve de here). Aquí

function highlightDays(date) { 
for (var i = 0; i < dates.length; i++) { 

var d = date.getDate(); 
var m = date.getMonth(); 
m += 1; // JavaScript months are 0-11 
var y = date.getFullYear(); 

var dateToCheck = (d + "/" + m + "/" + y); 
    if (dates[i] == dateToCheck) { 
     return [true, 'highlight', tips[i]]; 
    } 
    } 
return [true, '']; 
} 

Y, por supuesto, que la anterior se encuentra que no da cuenta de los principales-ceros relleno para la matriz dates necesitaba ser cambiado a:

var dates = ['22/1/2014', '23/1/2014']; 
+0

Su respuesta funcionó para mí. ¿Qué pasa si la fecha que tengo está en formato '31/08/2015 '? –

+0

No estoy frente a una computadora, pero dividiría la fecha en componentes de día, mes y año y volvería a combinar para pasar a esta función. Lo más probable es que el proceso de división hará que el '08' se convierta en '8'. Alternativamente, ¿no funcionaría la respuesta de Mugur? – Todd

+0

if (m <10) { \t m = '0' + m; } funcionó para mí –

3

No estoy seguro si esta voluntad ser todavía útil, pero como éste era útil para mí, quiero compartir lo que hice:

En mi JavaScript:

var holidays= ["2016/09/18", "2016/09/19", "2016/01/01", "2016/05/01", "2016/06/27", "2016/08/15"]; 

$("#SomeID").datepicker({ beforeShowDay: highLight }); 

function highLight(date) { 
     for (var i = 0; i < holidays.length; i++) { 
      if (new Date(holidays[i]).toString() == date.toString()) { 
       return [true, 'ui-state-holiday']; 
      } 
     } 
     return [true]; 
    } 

Y en el tema jquery-ui.css He añadido

.ui-state-holiday .ui-state-default { 
    color: red; 
} 

Si se desea resaltar también los fines de semana, usted tiene que utilizar este CSS en lugar

.ui-state-holiday .ui-state-default, .ui-datepicker-week-end .ui-state-default { 
    color: red; 
} 

y este es el resultado:
jqueryUI Calendar with Weekends and Holidays Highlight

(Tenga en cuenta que He configurado mi idioma para español, pero esto no es importante para este código)

0

Tarde a la fiesta, pero aquí hay un jsFiddle que he utilizado para la prueba:

https://jsfiddle.net/gq6kdoc9/

HTML:

<div id="datepicker"></div> 

JavaScript:

var dates = ['11/13/2017', '11/14/2017']; 
    //tips are optional but good to have 
    var tips = ['some description', 'some other description']; 

    $('#datepicker').datepicker({ 
    dateFormat: 'dd/mm/yy', 
    beforeShowDay: highlightDays, 
    showOtherMonths: true, 
    numberOfMonths: 3, 
    }); 

    function highlightDays(date) { 
    for (var i = 0; i < dates.length; i++) { 
     if (new Date(dates[i]).toString() == date.toString()) { 
     return [true, 'highlight', tips[i]]; 
     } 
    } 
    return [true, '']; 
    } 

y CSS:

td.highlight { 
    border: none !important; 
    padding: 1px 0 1px 1px !important; 
    background: none !important; 
    overflow: hidden; 
} 

td.highlight a { 
    background: #ad3f29 url(bg.png) 50% 50% repeat-x !important; 
    border: 1px #88a276 solid !important; 
} 

Construido sobre el Mi ¡Ejemplo de trabajo de ke arriba!

Cuestiones relacionadas