tengo dos fechas en javascript:comparación de fechas con javascript
var first = '2012-11-21';
var second = '2012-11-03';
me gustaría hacer:
if(first > second){
//...
}
cómo es la mejor manera para esto, sin biblioteca externa?
tengo dos fechas en javascript:comparación de fechas con javascript
var first = '2012-11-21';
var second = '2012-11-03';
me gustaría hacer:
if(first > second){
//...
}
cómo es la mejor manera para esto, sin biblioteca externa?
if((new Date(first).getTime() > new Date(second).getTime()))
{
----------------------------------
}
demasiado trabajo, 2 nuevo objeto Fecha y multiplicación 3 veces, y compárelo. – totten
No está trabajando en el formato dd/mm/aaaa, por lo que debe convertir a mm/dd/aaaa o aaaa/mm/dd –
Funcionará sin llamar al método getTime(). –
Debido a su formato de fecha, puede utilizar este código:
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
//...
}
Se comprobará si 20121121
número es más grande que 20121103
o no.
No, no funcionará. 'replace' reemplazará solo la primera aparición de dash. – VisioN
Claro, lo edité y lo probé, ahora está funcionando :) – totten
Si se puede contar con ese formato de fecha, entonces (según mi respuesta) simplemente puede compararlos como cadenas, no es necesaria ninguna conversión ... – nnnnnn
Si las fechas son cadenas en una estricta formato yyyy-mm-dd
como se muestra en la pregunta entonces su código funcionará tal cual, sin convertir a los objetos de fecha o números:
if(first > second){
... hará un lexographic (es decir, , "orden del diccionario" alfanumérico) comparación de cadenas - que comparará los primeros caracteres de cada cadena, luego los segundos caracteres de cada cadena, etc. Lo cual dará el resultado que desea ...
Utilice esta función para comparar fechas en javascript:
function fn_DateCompare(DateA, DateB) {
var a = new Date(DateA);
var b = new Date(DateB);
var msDateA = Date.UTC(a.getFullYear(), a.getMonth()+1, a.getDate());
var msDateB = Date.UTC(b.getFullYear(), b.getMonth()+1, b.getDate());
if (parseFloat(msDateA) < parseFloat(msDateB))
return -1; // less than
else if (parseFloat(msDateA) == parseFloat(msDateB))
return 0; // equal
else if (parseFloat(msDateA) > parseFloat(msDateB))
return 1; // greater than
else
return null; // error
}
Puede hacerlo de esta manera, no tendrán ningún problema:
var date1 = new Date('2013-07-30');
var date2 = new Date('2013-07-30');
if(date1 === date2){ console.log("both are equal");} //it does not work
==>undefined //result
if(+date1 === +date2){ console.log("both are equal");} //do it this way!
//(use + prefix for a variable that holds a date value)
==> both are equal //result
Nota: - no se olvide de usar un prefijo +
La mejor manera es,
var first = '2012-11-21';
var second = '2012-11-03';
if (new Date(first) > new Date(second) {
.....
}
puede hacerlo de esta manera también.
if (dateFormat(first, "yyyy-mm-dd") > dateFormat(second, "yyyy-mm-dd")) {
console.log("done");
}
O
if (dateFormat(first, "mm-dd-yyyy") > dateFormat(second, "mm-dd-yyyy")) {
console.log("done");
}
yo uso siguiente plug-in para dateFormat()
var dateFormat = function() {
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
timezoneClip = /[^-+\dA-Z]/g,
pad = function (val, len) {
val = String(val);
len = len || 2;
while (val.length < len) val = "0" + val;
return val;
};
// Regexes and supporting functions are cached through closure
return function (date, mask, utc) {
var dF = dateFormat;
// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
mask = date;
date = undefined;
}
// Passing date through Date applies Date.parse, if necessary
date = date ? new Date(date) : new Date;
if (isNaN(date)) throw SyntaxError("invalid date");
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
// Allow setting the utc argument via the mask
if (mask.slice(0, 4) == "UTC:") {
mask = mask.slice(4);
utc = true;
}
var _ = utc ? "getUTC" : "get",
d = date[_ + "Date"](),
D = date[_ + "Day"](),
m = date[_ + "Month"](),
y = date[_ + "FullYear"](),
H = date[_ + "Hours"](),
M = date[_ + "Minutes"](),
s = date[_ + "Seconds"](),
L = date[_ + "Milliseconds"](),
o = utc ? 0 : date.getTimezoneOffset(),
flags = {
d: d,
dd: pad(d),
ddd: dF.i18n.dayNames[D],
dddd: dF.i18n.dayNames[D + 7],
m: m + 1,
mm: pad(m + 1),
mmm: dF.i18n.monthNames[m],
mmmm: dF.i18n.monthNames[m + 12],
yy: String(y).slice(2),
yyyy: y,
h: H % 12 || 12,
hh: pad(H % 12 || 12),
H: H,
HH: pad(H),
M: M,
MM: pad(M),
s: s,
ss: pad(s),
l: pad(L, 3),
L: pad(L > 99 ? Math.round(L/10) : L),
t: H < 12 ? "a" : "p",
tt: H < 12 ? "am" : "pm",
T: H < 12 ? "A" : "P",
TT: H < 12 ? "AM" : "PM",
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o)/60) * 100 + Math.abs(o) % 60, 4),
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
};
return mask.replace(token, function ($0) {
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
});
};
}();
// Some common format strings
dateFormat.masks = {
"default": "ddd mmm dd yyyy HH:MM:ss",
shortDate: "m/d/yy",
mediumDate: "mmm d, yyyy",
longDate: "mmmm d, yyyy",
fullDate: "dddd, mmmm d, yyyy",
shortTime: "h:MM TT",
mediumTime: "h:MM:ss TT",
longTime: "h:MM:ss TT Z",
isoDate: "yyyy-mm-dd",
isoTime: "HH:MM:ss",
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};
// Internationalization strings
dateFormat.i18n = {
dayNames: [
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
monthNames: [
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
]
};
// For convenience...
Date.prototype.format = function (mask, utc) {
return dateFormat(this, mask, utc);
};
¿Qué es la función 'dateFormat()'? – nnnnnn
@nnnnnn agrego un complemento para dateFormat(). –
no es un posible duplicado, una copia exacta - incluso los títulos son los mismos :) (¿La gente nunca Google antes de hacer preguntas?) –
@DvirAzulay - No es un duplicado exacto: muestra suficiente código como para implicar que se usarán cadenas con un formato de fecha específico (que, como se explica en mi respuesta, requiere _no conve rsion_ para comparar), pero la otra pregunta no proporciona información sobre el formato. – nnnnnn