在Titanium Mobile中,日期不能正确比较
Dates don't compare correctly in Titanium Mobile
取以下代码:
var first = new Date("2011-09-17T15:12:04.331Z");
var second = new Date("2011-09-17T19:55:19.269Z");
alert(first < second);
在浏览器(http://jsfiddle.net/fdqjs/0/)中,它提示为true。在Titanium Mobile中,它警告0或false。为什么会这样?我无法获得与源文件不同格式的日期。
我的猜测是Titanium Mobile没有运行一个足够新的Javascript版本来覆盖你正在使用的日期格式。
如果你查找Date对象的规范,它采用RFC 1123中定义的日期,该日期从RFC 822中获得日期定义,这在我看来不像它支持你正在使用的确切格式。从Javascript 1.8.5开始,它也接受ISO 8601格式的日期,看起来它可能涵盖了你所拥有的。
如果可以的话,我建议修改你的日期字符串,使其像旧的规范一样工作。更多信息请看MDN。
一个有效的RFC822日期时间的例子是:02 Oct 2002 15:00:00 +0200
如果你的日期总是与你在问题中显示的格式完全一致,那么你可以做一个简单的转换,像这样:
function ConvertDate(dateIn) {
var monthStr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
// desired format "02 Oct 2002 15:00:00 +0200"
var dateOut = dateIn;
var matches = dateIn.match(/('d+)'D+('d+)'D+('d+)T(.*)Z$/);
if (matches) {
dateOut = matches[3] + " " +
monthStr[parseInt(matches[2] - 1, 10)] + " " +
matches[1] + " " +
matches[4] + " GMT";
}
return(dateOut);
}
此处演示:http://jsfiddle.net/jfriend00/APxN7/.
注意:这个简单的函数假设你的日期总是在你的问题中显示的格式,并且总是有效的,因为它不会处理任何任意的ISO 8601日期作为输入,只处理你显示的格式。
要获得当前日期到一个javascript对象,你可以这样做:
var now = Date();
您可以在now
对象上使用为Date对象定义的任何方法,包括获取日期的任何部分或将其转换为字符串的方法,等等....
要获取ConvertDate输出的日期的internet形式,您可以使用:
now.toUTCString();
相关文章:
- 不能从angular2中的子组件指定父组件中的数组
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 转义符不能与innerHTML一起使用
- JSON.parse没有'不能使用Javascript
- 不能比较数组值,如果它不是数字
- 字符串比较不能工作
- Javascript操作符不能比较整数和零(例如:10、100、1000等)
- 比较两次的格式'hh:mm t'在javascript中不能在safari中工作
- 不能使用Angular.js/Javascript比较日期
- 不能比较条件语句中int类型的变量
- Javascript空类型不能比较
- 为什么这个日期比较不能在javascript中工作?
- Javascript比较不能使用提示符、while循环和!==
- 不能在IE中比较Jquery ajax对象
- 为什么我的比较数组不能工作?
- 在Titanium Mobile中,日期不能正确比较
- Angularjs的ngDisabled比较表达式不能正确计算
- 不能比较JQuery中的变量
- 为什么角顺序自定义比较器不能工作