截止日期当前工作周的时间框架

时间:2014-03-23 19:08:52

标签: javascript node.js datetime node-mysql

Javascript时间范围

<小时/> 我正在尝试编写一个Node应用程序,该应用程序根据等于当前工作周开始和结束的时间范围从MySQL获取数据条目。


这是Node-MySQL查询:

function retrieveSales(){

    connection.query('select * from sales_entries where date BETWEEN ? AND ?',
    timeFrame,

    function (err, rows, fields) {

        var sales = new Array();

        for (x=0;x<rows.length;x++){
            sales.push(rows[x]);
        }

        return sales;

    });
}

其中timeFrame是一个包含datetime格式的两个日期的数组,这是MySQL默认提供的第二个特定时间数据类型。 (2010年12月31日03:55)


问题是,我从未在JS中使用过多的日期。所以我有两个问题:

  1. 将不同的日期格式记录到数据库或日期时间是否更好?

  2. 我应该如何生成此数组,其值分别等于当前工作周(星期一)第一天的开始和当前工作周(周五)的最后一天的结束?


  3. 小提琴

    Here's the JSFiddle,包括三个功能;执行查询的retrieveSales dateTime(),以datetime格式返回当前时间,retrieveData是调用所有必要查询的主要函数。

1 个答案:

答案 0 :(得分:0)

一般情况下,我会说在您的数据库和其他任何地方使用ISO8601格式并http://momentjs.com/docs/来处理您的日期。

尽管如此,你仍然可以像你一样使用日期时间字符串,只需解析一下&#39;使用自定义格式字符串。

// parse from string, see docs for format
var t = moment('31/12/2010 03:55 AM', "DD/MM/YYYY hh:mm A"); 

// ISO-8601
t.format()

// and back to that MySQL format
t.format("DD/MM/YYYY hh:mm A");

您可以对t(比较,突变,格式化)进行大量计算,只需查看momentjs文档即可。

编辑:更具体地说,填充timeFrame可以如下:

// from sun to saterday of this week
var timeFrame = [ moment().days(0).format("DD/MM/YYYY hh:mm A")
                , moment().days(6).format("DD/MM/YYYY hh:mm A") ];

// or since method.days() wraps around, this is monday-sunday
var timeFrame = [ moment().days(1).format("DD/MM/YYYY hh:mm A")
                , moment().days(7).format("DD/MM/YYYY hh:mm A") ];

HTH