【问题标题】:Sorting UTC dates in javascript在javascript中对UTC日期进行排序
【发布时间】:2012-04-25 05:26:40
【问题描述】:

编辑 2012 年 4 月 16 日:我解决了将时区缩写为字母格式的问题,必须下载第三方排序方法并添加一些东西才能获得所需的结果。现在唯一的问题是夏令时处理程序,但有很多主题。但是,如果有人知道如何处理 UTC 夏令时处理程序,请随时提供帮助。

谢谢大家。 ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// / 我制作了一个 html 表,我使用 knockoutjs 从私有服务器中提取信息,并使用 JSON 函数将其与 javscript 视图模型绑定。我正在尝试使每列可排序(单击一次列标题以根据该列的信息按降序排列所有内容;再次单击标题以使所有内容按升序排列,第三次按原始顺序排列所有内容)。

请注意:我已经搜索了我的问题并看到了其他解决方案,但到目前为止没有任何东西对我有用。我希望找到针对我的代码的解决方案。

Javascript ViewModel.js 文件基本上是这样的:

Event(column1, column2, ...., columnN){
    var self = this;
    self.column1 = column1;
    self.column2 = column2;
    .
    .
}

//Sort column2 that has the Dates (dd (day) HHMM (hours/minutes) mmm (month) yy (year) format)

self.sortColumn = "Column2"
self.sortAscending = true;

self.SortByDates = function(){
    if(self.sortColumn == "Column2")
        self.sortAscending = !self.sortAscending;
    else{
        self.sortColumn = "Column2"
        self.sortAscending = true;
    }
    self.rows.sort(function(a,b){
        if(self.sortAscending == true)
            for(self.Column2 in self.rows)
                return a.Column2 > b.Column2 ? 1 : a.Column2 < b.Column2 ? -1 : 0;
            else
                return a.Column2 < b.Column2 ? 1 : a.Column2 > b.Column2 ? -1 : 0;
    });
}

//specify location of server and info and get them
function getEvents(){
    $.getJSON("http://.........",
        function (data){
            $.each(data.d, function(i, item){
                handleEvent(item)
            })
        }
    );
}
//pushes (AKA populates) info from server into the table
function handleEvent(item){
    var newEvent = new Event(item.Column1InfoFromServer,
                                formatJSONDate(item.Column2DateInfoFromServer), .....)
    this.Model.rows.push(newEvent);
}
//Formats the date info from server into dd (day) HHMM (hours/minutes) mmm (month) yy (year)
formatJSONDate(jsonDate){
    var date = new Date(parseInt(jsonDate.substr(6)));
    return date.format("dd HHMM mmm yy");
}

this.Model = new ViewModel();
this.getEvents();
ko.applyBindings(this.Model);

我很难以转换后的形式获取日期(是的,它必须是那种形式 --> 实际上,我仍然需要弄清楚如何在之后包含时区缩写'HHMM' 部分基于 UTC)。因此,假设我在表中的其他日期中有“11 1136 Apr 12”和“22 1624 Jan 12”。现在,当我尝试根据日期对表格进行排序时,它们的排序不正确。任何帮助表示赞赏,谢谢。

编辑:为了清楚起见,我正在尝试以军事时区代码(时区“A”-“Z”)显示时区。此外,从服务器获取的日期已经是 UTC。

【问题讨论】:

    标签: javascript mvvm knockout.js date-sorting


    【解决方案1】:

    更新

    我在看另一个问题,有人创建了一个淘汰赛网格插件: https://github.com/ericmbarnard/KoGrid

    我敢打赌这可能会对你有所帮助:-)

    ---怀旧的老答案----

    Underscore 库中有一些很棒的辅助函数,其中之一是 sort:

    http://documentcloud.github.com/underscore/#sortBy

    sortBy_.sortBy(list, iterator, [context]) 返回排序后的副本 列表,按每个值的运行结果升序排列 通过迭代器。迭代器也可以是属性的字符串名称 排序依据(例如长度)。

    _.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });
    => [5, 4, 6, 3, 1, 2]
    

    我会试一试,同时为您的约会创建一个更好的模型。听起来您需要存储一个作为唯一时间点的属性以及用户的文本值。

    【讨论】:

    • 谢谢,但我过去看过这个,虽然它让我对如何处理排序有了一些思考,但我总体上认为它并没有直接帮助解决我的情况。我已经完成了所有剩下的排序,将时区转换为军事 UTC 缩写,这只是一个字母缩写 (A-Z)。我试图让日期显示'dd'(天)'HH''MM''TZ'(小时/分钟/时区缩写)mmm(月)yy(年)。现在我得到了类似的东西:
    • 抱歉,我的最后一条评论好像被截断了。我目前得到的是“22 1626(2012 年 2 月 22 日星期三 20:26:43 GMT(东部标准时间))2 月 12 日”。问题是如何将括号中的所有内容翻译成 UTC 时区 (A-Z) 的单个字母缩写。
    【解决方案2】:

    好吧,要获取日期对象的数值,请按 pDate.valueOf() 排序。这将为您提供自纪元以来的毫秒数。

    但是,您的排序函数内部存在问题,但我不确定它应该做什么。您不能在排序函数中遍历对象并返回类似的值。

    【讨论】:

    • 谢谢,我做了一些重新工作,通过不将日期信息海峡转换出服务器,使排序日期正确升序和降序。相反,我将其保存在 1970 年的毫秒格式中,并创建了一个与我的 Events() 部分中的虚拟变量相同的虚拟变量。然后我基于它运行我的排序方法并在表格中显示转换后的格式。但是,我仍然不确定如何显示适当的时区,我仍然无法弄清楚如何让表格恢复到其默认状态。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2021-10-03
    相关资源
    最近更新 更多