【问题标题】:How to store month and year only and set day to 1 by default for all dates?如何仅存储月份和年份并将所有日期的日期默认设置为 1?
【发布时间】:2017-11-21 09:19:29
【问题描述】:

我的日期是2010-12-24

我需要将日期作为2010-12-01 存储在数据库表中。这应该适用于所有日期。

当插入另一个日期2010-12-25时,它也应该被存储为2010-12-01,对于2017-01-29,它是2017-01-01

如何将日期设置为默认 1?

我希望这很清楚。任何帮助表示赞赏。谢谢。

【问题讨论】:

  • 在应用层用字符串函数做就行了
  • 查找当月的第一个日期
  • 如果我是你,我会在代码中这样做,我喜欢分离职责,数据库是用于存储的!我在代码和数据库中有业务逻辑很难维护!
  • 我也在 Controller 类中这样做.. 感谢您的建议.. :) 并感谢您的回答。

标签: php mysql sql date


【解决方案1】:

更简单的方法是使用 PHP 的内置日期函数:

// here's your date
$date='2017-01-12';
// and here we transform it as we want
$date_first = date('Y-m-01', strtotime($date));
// check out the result :)
echo $date_first;

【讨论】:

  • 不错的答案:-)
【解决方案2】:

不过,在 mysql 中也可以做到。

set @date = '2017-12-25';
select str_to_date(CONCAT(YEAR(@date),' ',MONTH(@date),' 1'), '%Y %m %d');

您不需要使用@date 变量,只需将@date 替换为您需要插入的日期,然后使用str_to_date 将日期替换为1。

【讨论】:

    【解决方案3】:

    可以直接在MySql中实现如下:

    SELECT DATE_SUB('2010-12-25', INTERVAL DAY('2010-12-25')-1 DAY)
    

    解释:

    1. DAY('2010-12-25')-1 DAY // will return 24
    2. DATE_SUB('2010-12-25', INTERVAL 24) // will return 25-24 = 01 i.e. 2010-12-01
    

    这适用于所有情况。

    【讨论】:

      【解决方案4】:

      这应该可行,请根据您的要求进行调整

      $today = date("Y-m", strtotime("2017-12-25"));
        $dbDate =  date ("Y-m-d", strtotime($today."-1"));
        echo $dbDate;
      

      将 $dbDate 传递给查询。

      【讨论】:

        【解决方案5】:
        <?php
        
        $date='2017-01-12';
        
        $date=explode('-',$date);
        $date[2]=str_replace($date[2],'01',$date[2]);
        $date=implode('-',$date);
        print_r($date);
        

        输出是:

        2017-01-01
        

        所以它总是用01 代替这一天。 在您可以对新日期执行插入查询后,因为它已经在 php 中进行了修改。

        【讨论】:

        • explode, implode + str_replace 只是为了这样一个简单的用例。丑
        • 刚刚根据提问回答了OP问题。我的意思是我的解决方案很简单。
        • 只是评论您的答案,因为您的代码不容易快速理解。如果日期以另一种格式出现怎么办?您在所有部分之间得到了带有- 的输出。此外,如果提问者在他的应用程序中以较高级别使用此功能,可能会导致性能下降。最好的答案是最简单、最可靠的答案:)
        • 如果您已经为此设置了 date(),则无需使用字符串函数
        猜你喜欢
        • 2011-06-27
        • 2012-09-13
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 2018-12-24
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多