2009-02-17 28 views
10

Estoy trabajando con una aplicación ASP.NET con localización y globalización. Tengo algunas dificultades para entender cómo funciona la función Date() en javascript para que funcione correctamente dado el entorno del usuario. Mi base de usuarios se divide entre México (español) y los EE. UU. (Inglés). Como el formato de fecha de México es dd/mm/aaaa y el formato de inglés es mm/dd/aaaa, el constructor de javascript estándar Date (strDate) no funciona para mí.Javascript Date Localización

¿Alguien sabe la mejor manera de manejar la globalización/localización de un valor de fecha de JavaScript? Tengo algunas reglas comerciales para hacer cumplir la fecha similar. Debe ser 90 días antes de la fecha B y la fecha B no puede exceder el día de hoy.

Respuesta

12

Tome un vistazo a datejs, que se encarga de la localización muy bien. Viene con a lot of globalization setups. Simplemente carga la configuración de globalización de su CultureInfo actual y datejs se ocupa del resto.

1

Matt Kruse desarrolló un really interesting date library que debería ayudar con su caso particular.

He aquí un fragmento del método se debe utilizar para el tema que usted ha mencionado:

// ------------------------------------------------------------------ 
// parseDate(date_string [, prefer_euro_format]) 
// 
// This function takes a date string and tries to match it to a 
// number of possible date formats to get the value. It will try to 
// match against the following international formats, in this order: 
// y-M-d MMM d, y MMM d,y y-MMM-d d-MMM-y MMM d 
// M/d/y M-d-y  M.d.y  MMM-d  M/d  M-d 
// d/M/y d-M-y  d.M.y  d-MMM  d/M  d-M 
// A second argument may be passed to instruct the method to search 
// for formats like d/M/y (european format) before M/d/y (American). 
// Returns a Date object or null if no patterns match. 
// ------------------------------------------------------------------ 

function parseDate(val) { 
    var preferEuro=(arguments.length==2)?arguments[1]:false; 
    generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d'); 
    monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d'); 
    dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M'); 
    var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst'); 
    var d=null; 
    for (var i=0; i<checkList.length; i++) { 
     var l=window[checkList[i]]; 
     for (var j=0; j<l.length; j++) { 
      d=getDateFromFormat(val,l[j]); 
      if (d!=0) { return new Date(d); } 
      } 
     } 
    return null; 
    } 
+1

me veía en esto, pero al final terminó siendo un poco más de trabajo para conseguir todo junto. Gracias por tu ayuda. – RSolberg