0

所以我在我的项目上做得很好(链接到以前的 StackOverflow 问题),并设法学到了很多东西,但是有一个问题一直困扰着好几天,我似乎无法解决它。

它与使用 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";

所以我的大问题是:为什么我的 4 个 DOB 中有 3 个被设置为日期 0(我的 PC 上的 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 |
4

1 回答 1

1

这是因为这些 DoB 来自 1969 年 12 月 31 日之前,而 UNIX 纪元从那时开始,所以在此之前的任何事情都是负面的。

来自维基百科:

Unix 时间或 POSIX 时间是用于描述时间瞬间的系统,定义为自 1970 年 1 月 1 日星期四 00:00:00 协调世界时 (UTC) 以来经过的秒数,不包括闰秒。

更详细一点:基本上你想要做的事情是不可能的。根据它的用途,可能有不同的方法可以做到这一点,但使用 UNIX 时间戳可能不是这样的日期的最佳主意。

于 2013-07-14T23:43:38.950 回答