所以我在我的项目(Link to previous StackOverflow question)上做得很好,并且已经设法学到了很多,但是有一个问题是真的困扰我天和我似乎无法解决它。
它与使用UNIX_TIMESTAMP调用将我的SQL数据库中的日期转换为UNIX时间格式有关,但由于某种原因,我的表中只有一组日期给我带来了问题!
==============
所以这些是我得到的价值 -
#abridged here, see the results from the SELECT statement below to see the rest
#of the fields outputted
| firstVst | nextVst | DOB |
| 1206936000 | 1396238400 | 0 |
| 1313726400 | 1313726400 | 278395200 |
| 1318910400 | 1413604800 | 0 |
| 1319083200 | 1413777600 | 0 |
当我使用这个SELECT语句时 -
SELECT SQL_CALC_FOUND_ROWS *,UNIX_TIMESTAMP(firstVst) AS firstVst,
UNIX_TIMESTAMP(nextVst) AS nextVst, UNIX_TIMESTAMP(DOB) AS DOB FROM people
ORDER BY "ref DESC";
所以我的大问题是:为什么我的DOB中有4个被设置为0(IE 12/31/1969在我的电脑上)?为什么这不会发生在我的其他领域?
我可以使用更简单的SELECT语句很好地看到数据,而DOB字段看起来很好......?
#formatting broken to change some variable names etc.
select * FROM people;
| ref | lastName | firstName | DOB | rN | lN | firstVst | disp | repName | nextVst |
| 10001 | BlankA | NameA | 1968-04-15 | 1000000 | 4600000 | 2008-03-31 | Positive | Patrick Smith | 2014-03-31 |
| 10002 | BlankB | NameB | 1978-10-28 | 1000001 | 4600001 | 2011-08-19 | Positive | Patrick Smith | 2011-08-19 |
| 10003 | BlankC | NameC | 1941-06-08 | 1000002 | 4600002 | 2011-10-18 | Positive | Patrick Smith | 2014-10-18 |
| 10004 | BlankD | NameD | 1952-08-01 | 1000003 | 4600003 | 2011-10-20 | Positive | Patrick Smith | 2014-10-20 |
答案 0 :(得分:1)
这是因为那些DoB是在1969年12月31日之前,而UNIX时代开始的,所以之前的任何事情都是负面的。
来自维基百科:
Unix时间或POSIX时间是用于描述时间瞬间的系统,定义为自1970年1月1日星期四00:00:00协调世界时(UTC)以来经过的秒数,不计算飞跃秒。
更详细一点:基本上你要做的事情是不可能的。根据它的用途,可能有不同的方法可以做到这一点,但使用UNIX时间戳可能不是那样的日期的最佳选择。