【问题标题】:PHP date format convertingPHP日期格式转换
【发布时间】:2010-02-25 08:57:26
【问题描述】:

这是我所拥有的:

$dateFormat = 'M d, Y';
$dateString = 'January 23, 2010';

我需要的是$dateString 的时间戳,所以我可以这样做:

$newFormattedDate = date('Y-m-d', $timestamp);

我尝试使用strtotime 函数,但它试图找出格式本身,但并不总是有效。在我的情况下,我知道日期字符串和日期格式。

如何将$timestamp 设置为与date 函数一起使用的适当值?

编辑:我需要它在 Linux 和 Windows 环境中工作。

编辑:解决方案必须支持 PHP 4 或更高版本

编辑:MySQL 有一个名为STR_TO_DATE 的函数,它接受日期字符串和日期格式并返回Y-m-d 格式化的日期字符串。 php 的任何等效函数也适用于我。

【问题讨论】:

    标签: php date


    【解决方案1】:

    从 PHP5.3 开始,您可以使用 DateTime API

    $dt = date_create_from_format('M d, Y', 'January 23, 2010');
    echo date_timestamp_get($dt);
    

    或使用 OOP 表示法

    $dt = DateTime::createFromFormat('M d, Y', 'January 23, 2010');
    echo $dt->getTimestamp();
    

    请注意,虽然 DateTime 在 PHP ->format('U') 模拟 ->getTimestamp(),但对于 createFromFormat() 没有简单的解决方法

    另一种方法是使用 Zend 框架中的 Zend_Date

    $date = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy');
    echo $date->get(Zend_Date::TIMESTAMP);
    

    【讨论】:

    • 嗨,戈登,感谢您的回答,但我需要它才能在 PHP 4 或更高版本中工作。我也将此要求添加到问题中。
    【解决方案2】:

    使用strptimemktimestrftime

    $ftime = strptime($dateString, $dateFormat);
    $timestamp = mktime($ftime['tm_hour'], $ftime['tm_min'], $ftime['tm_sec'], 1,
                        $ftime['tm_yday'] + 1, $ftime['tm_year'] + 1900);
    
    echo strftime('Y-m-d', $timestamp);
    

    请注意strptime 未在 Windows 平台上实现。

    请注意,mktime 的参数有些不寻常 - strptime 返回一年中的某一天(介于 0-365 之间,含)而不是一个月中的某一天和一个月,因此我们将月份参数设置为mktime 为 1,并将一年中的日期加 1。此外,strptime 返回自 1900 年以来的年份作为它返回的年份值,因此我们需要在年份上加上 1900,然后再将其传递给 mktime

    此外,您可能希望在将$ftime 传递给mktime 之前检查它是否为FALSEstrptime 返回 FALSE 表示输入 $dateString 不是根据 $dateFormat 的有效日期格式。

    【讨论】:

    • 感谢 Dominic,但在 strptime 的 php 手册中它说“此功能未在 Windows 平台上实现。”。这对我来说是个杀手。
    • 还有strtotime 有帮助。
    • 您好 Henasraf,正如我在问题中解释的那样,strtotime 在这种情况下不起作用。
    • 啊-好的。我会把这个答案留在这里,以防它对其他人有用。将来,如果您有平台限制,可能值得在问题中说明它们:-)
    • +1 提到 strptime 未在 Windows 平台上实现。
    【解决方案3】:

    鉴于我对问题的理解以及 PHP 中可用的功能,您需要在某处或其他地方放宽您的期望。

    一个“简单”的解决方案(已经打折)是强制使用 PHP 5.3 和其中可用的工具。

    一个不太简单的解决方案是采用这些添加并将它们移植到 PHP 领域(与 PHP 4 兼容,祝你好运)。

    另一种探索途径是考虑strtotime 不适合您的情况并解决这些限制。

    您的格式字符串的变化范围有多广?如果它们非常受限制,则可以提出将格式字符串映射到函数/方法(进行日期解析)的解决方案。

    【讨论】:

      【解决方案4】:
      $dateFormat = 'M d, Y'
      $timestamp = strtotime($dateString);
      echo date($dateFormat, $timestamp); 
      

      如果我没有误解你的问题,你可以试试上面的代码..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-30
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        相关资源
        最近更新 更多