2012-02-28 105 views
1

我试图让我的头绕着别人的代码,他们已经编写了处理新闻故事发布日期的代码。问题来了,因为他们使用的是这一行 -理解日期处理时间

$date = strtotime("midnight", strtotime($dateString)); 

处理使用jQuery的日历控件选择一个日期。这适用于将来的日期,但是当您尝试使用上一个日历年的日期时,它会使用当前年份。我认为这是由于“午夜”发现选定日期和月份的最接近实例。

我可以删除“午夜”,但我不确定这会产生什么影响 - 是否有一个原因,午夜可以在那里?

编辑:这是处理日期的完整代码块。日期包含允许用户在特定时间发布项目的时间。

  $array['display_date'] = '24 October, 2011 17:30'; 
      $string = $array['display_date']; 
      $dateString = substr($string, 0, -5); 

      $timeArray = explode(':', substr($string, -5)); 
      $hours_in_secs = 60 * 60 * $timeArray[0]; 
      $mins_in_secs = $timeArray[1]; 
      $date = strtotime("midnight", strtotime($dateString)); 

      $timestamp = $date + $hours_in_secs + $mins_in_secs; 

      //assign timestamp to validation array 
      $array['display_date'] = $timestamp; 
      echo $array['display_date']; // Output = 1351094430 (Oct 24 2012 17:00:30) 
+1

'$ dateString'的格式是什么? – Mchl 2012-02-28 11:09:50

+0

样本输入,预期输出,实际输出? – 2012-02-28 11:17:21

+0

更新了示例输入和输出 – user1153594 2012-02-28 11:57:36

回答

4

这真的取决于什么$dateString包含。假设你的jQuery小部件也提供了时间部分,你的同事可能想要删除时间部分。比较以下几点:

echo date(DATE_ATOM, strtotime('2010-10-01 17:32:00')); 
// 2010-10-01T17:32:00+02:00 

echo date(DATE_ATOM, strtotime("midnight", strtotime('2010-10-01 17:32:00'))); 
// 2010-10-01T00:00:00+02:00 

如果你的部件犯规返回的时间部分,我不明白为什么要设定日期到午夜,因为这将是午夜自动:

echo date(DATE_ATOM, strtotime('2010-10-01')); 
// 2010-10-01T00:00:00+02:00 

注意,所有这些过去的日期,它们会导致过去的特定年份,而不是像你说的那样是当年。如果他们在您的代码中执行操作,则原因必须在其他位置。

当你改变代码时会有反响吗?我们无法知道。这只是一行代码,我们不知道任何上下文。当你改变代码时,你的unit-tests应该告诉你什么时候什么时候中断。更新

编辑告诉你的代码块是没有任何意义。询问写下它应该做什么的人。过去几年它不仅会错误地返回当前年份,而且会导致记录结果不正确,例如,

24 March, 2010 17:30 will be 2012-03-24T17:00:30+01:00 

我认为这是在转弯24 March, 2010 17:30成有效的时间戳,这是一个格式strtotime不能识别的一种尝试。但是这种方法被破坏了。当你在PHP5.3使用

$dt = DateTime::createFromFormat('d F, Y H:i', '24 March, 2010 17:30'); 
echo $dt->format(DATE_ATOM); // 2010-03-24T17:30:00+01:00 

如果您没有在5.3的是,经过https://stackoverflow.com/search?q=createFromFormat+php的替代解决方案。那里有一对夫妇。

+0

感谢您的回复戈登。新闻项目实际上设置为允许用户在确切时间发布它们 - 所以通过日历选择日期和时间。只是检查了这一点,它工作正常。我将添加完整代码块 – user1153594 2012-02-28 11:40:14

+0

好的 - 我最好放弃那里的内容并从头开始。谢谢Gordon – user1153594 2012-02-28 12:02:11

+0

一年前的逗号是主要问题,其余代码也需要整理。 – user1153594 2012-02-28 12:16:08