Search code examples
javascriptreact-nativein-app-purchaseexporeact-native-ios

How to check expiration date of apple receipt?


am working with in app purchase in react-native.am using expo-in-app-purchase.in order to validate receipt with app store am getting something like this:

 result [
 {
      .........................
       purchase_date: '2021-05-03 11:34:17 Etc/GMT',
        purchase_date_ms: '1620041657000',
      purchase_date_pst: '2021-05-03 04:34:17 America/Los_Angeles',
     original_purchase_date: '2021-05-03 11:33:20 Etc/GMT',
      original_purchase_date_ms: '1620041600000',
       original_purchase_date_pst: '2021-05-03 04:33:20 America/Los_Angeles',
        expires_date: '2021-05-03 11:39:17 Etc/GMT',
      expires_date_ms: '1620041957000',
       expires_date_pst: '2021-05-03 04:39:17 America/Los_Angeles',
        ...............................................
     }
     ]

 pending_renewal_info:[{
           expiration_intent: '1',
          auto_renew_product_id: '******************',
         is_in_billing_retry_period: '0',
          product_id: '****************************',
        original_transaction_id: '1000000785803993',
         auto_renew_status: '0'
 }]

then am trying to check the expiry of subscription Like this:

  const expirationDate = result.data.latest_receipt_info[0].expires_date_ms,
        expiry=Date.now() > expirationDate;//it is always true.

The expiry getting always true, because the date which apple give is 5 hours before my date.ie, if i purchase something in 2021-05-04 10:00:00 this date, in apple receipt the expiry date is showing something like this 2021-05-04 5:00:00.ie 5 hours behind.then how do i check my receipt expiry?


Solution

  • This should work

    const expirationDate = parseInt(result.data.latest_receipt_info[0].expires_date_ms);
    // Need to parse it to Int as it is in string format originally
    const expirationDateObject = new Date(expirationDate);
    
    const current = Date.now();
    const currentDateObj = new Date(current);
    
    const isExpired = currentDateObj.getTime() > expirationDateObject.getTime()
    
    console.log(isExpired);