转换时日期不同

时间:2013-06-02 03:05:58

标签: php javascript

你好我正在使用Date()函数我得到的时间是来自数据库的当前和时间来比较时间,但日期是不同的:

date_default_timezone_set("America/Los_Angeles"); // set time zone to LA
$date = date("m-d-Y h:i:s"); // current time
$current_time = strtotime($date); // current time in seconds
$get_time = 1357487529; //linux time from the server
$difference = $current_time - $get_time; //seconds that have pass already
$get_date = date("m-d-Y h:i:s", $get_time); // convert the linux time to current time and date
$exploded_get_date = explode(" ", $get_date); //divide the get date into 2 parts by space 0 = date 1 = time
$exploded_current_date = explode(" ", $date); //divide the current date into 2 parts by space 0 = date 1 = time

我得到的结果是:

01-Sun-2013 07:52:09 //get date
06-01-2013 07:56:25 //current date
1357487785 // current time
1357487529 // get time
256 //difference 

为什么说我在获得日期有第1个月,但是在当前日期实际上是6月,也就是说它是星期日6,那个星期六是1?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

m-d-Y不是解析的有效格式。只有你们美国人认为将这些元素置于一个未按顺序排列是明智的......

无论如何,重点是,06-01-2013是什么意思?是6月1日还是1月6日?

为了保持一致性,计算机假设1月6日(d-m-Y格式)。

我强烈建议使用Y-m-d H:i:s格式,因为它完全是big-endian,因此本身可以作为字符串排序。

编辑:应该注意,你可以使用time()来获取当前时间戳。

答案 1 :(得分:0)

您的代码非常冗余:

$date = date("m-d-Y h:i:s"); // current time
$current_time = strtotime($date); // current time in seconds

可以用简单的

代替
$current_time = time();

$get_date = date("m-d-Y h:i:s", $get_time); // convert the linux time to current time and date
$exploded_get_date = explode(" ", $get_date); //divide the get date into 2 parts by space 0 = date 1 = time
$exploded_current_date = explode(" ", $date);

可能只是

$exploded_date = date('m-d-y', $get_time);
$exploded_time = date('h:i:s', $get_time);

您在无用/重复和最终冗余操作上浪费了相当多的CPU周期。

从更大的角度来看,您的错误是PHP的正常且最简单的分析/解析日期/时间字符串为yyyy-mm-dd格式。您正在构建mm-dd-yyyy,这几乎完全是混乱的。当你提供不确定的格式时,PHP无法正确猜测。这意味着strtotime()会搞砸并给你不正确的结果。