YYYYMMDD 轉時間戳,如何正確的比對時間?

我有設定兩個欄位
一個是 start 一個是 end
格式是用 jquery 的 datepicker
所以會是 2018-01-01 格式
只是現在我要做一個比對

我是用一個 電商優惠券 的概念
所以要使用時輸入優惠碼
因此檢查優惠碼的開始時間結束時間跟今天是否吻合
如果今天的時間已經低於開始時間,那就不可用,表示優惠碼失效
假設今天的時間是高於開始時間,且低於結束時間,那就可以使用
只是我送入數據庫的時候會是字串 ( 2018-01-01)
這樣如果我要做到以上的比對
我應該把它轉成時間戳好,還是字串日期的做法最好?
我想到如果轉成時間戳,我要怎麼比對?
如果是轉成日期,假設今天是 2018-07-25,但是到期日是 2018-07-26,還可以用,那我要怎麼往上往下比對?不是數字所以沒辦法用大於小於

補充:
我發現即使「結束時間」還沒有到,他還是報錯耶?

  "SELECT * FROM `discount`
      WHERE
        `code` = '{$cart_code}'
      AND
        `end` <= '".time()."' "
阅读 3.4k
4 个回答

强烈推荐时间戳,因为时间戳是数字类型的存储本身会比字符串就快,而且数字的比对也比字符串容易
你可以用strtotime将字符串时间类型转成时间戳 然后比较他们的大小
如果当前时间小于开始时间或者当前时间大于结束时间,那么优惠券不可用
如果当前时间在开始时间和结束时间之间,就是可用

转成时间戳

sql:select * from xx where start >= time and end <= time;

直接大小比较是可以的啊,字符串的大小比较是比较字符的ASCII码,你这种格式完全可以采用啊;
"2028-01-02" > "2018-01-02"
true
"2018-01-02" > "2018-02-02"
false
"2018-01-02" > "2018-01-03"
false
"2018-01-04" > "2018-01-03"
true

直接比较就可以的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题